Eclipse – 如何在整个项目中“将包声明更改为…”

我刚刚将大量的源代码导入Eclipse,基本上包名不再有效(代码已移动文件夹)。 有没有办法在Package Explorer中选择所有源代码并点击热键,以便正确解决所有包声明? 我知道你可以通过选择源并点击ctl-shift-o来进行导入,但也可以用于包声明吗?

更新: 重构包不起作用,因为我不想更改包的名称或位置,我只需要调整Java源代码中的包声明。

如果包声明不再有效,那么所有这些无效声明都将出现在Eclipse的Problems视图中。 如果您没有看到此视图,可以从Window-> Show View – > Other … – > Problems(在General选项卡下)打开它。

您可以通过在上下文菜单中选择“ Quick fix选项(右键单击可用)来过滤“问题”视图中的问题并更正可轻松纠正的问题。 在您的情况下,您应该看到类似于下面发布的屏幕截图:

快速修复错误的包裹

应用快速修复选项是微不足道的,只要您知道哪一个是正确的 – 您要么必须更改类中的包声明,要么更改类本身的位置。 不幸的是,没有办法一次性解决多个单位的问题; 你将不得不为每个问题应用快速修复。

如果要过滤仅此类问题,请考虑配置“问题”视图以显示错误文本中文本内容“与预期包不匹配”的所有错误,如以下屏幕截图所示:

配置问题内容

Eclipse配置包问题

对于这个特殊问题(通常伴随自动生成的工件文件),我找到了一个简洁的解决方案。

所以如果问题是你的包声明是“package abc;” 在200个文件中,您希望它是“package com.aa.bb.cc.abc;”

然后在eclipse中,Search-> File for“package abc;” 在必需的文件夹或pkg或整个工作区中。 不要选择“搜索”选项,但选择“替换”,然后输入“package com.aa.bb.cc.abc;” 当它在搜索后要求更换时。 应该做的伎俩。

右键单击包,选择Refactor> Rename。 这将使用新包名更新所有源文件。

我只是遇到了同样的问题所以我写了一个bash脚本来做到这一点。

 function java-package-update { for path in $(find $1 -type f -name "*.java"); do D=$(dirname $path); F=$(basename $path); P=$(echo $D|tr '/' '.'); if egrep -q '^\s*package\s*' $path; then sed -i '' '/^\s*package\s*/s/^\(\s*package\s*\)[^;]*\(;.*\)/\1 '$P'\2/' $path; else echo >&2 "no package in $path"; fi; done; } 

使用的sed命令是OSX上的命令。 如果你正在使用gnu sed,那么在-i之后你不需要”参数。

只需将其粘贴并在包含源的目录中运行即可。 除非你非常勇敢,否则请先备份你的来源。

例:

 $ cd /home/me/proj/fred/src $ ls com $ cp -a com com.backup $ java-package-update com $ # fingers crossed $ diff -ru com.backup com 

我真的应该开始用更现代的语言来做这些东西,比如perl 🙂

这应该是你的伎俩。

首先将所有文件导入默认包,然后将它们拖到新包中,JDT将进行重构并更改整个项目中的包声明。

这是一个老问题,但我遇到了同样的问题,写了一个非常简单的bash脚本。 希望它会帮助某人。

 for i in *.java; do sed -i 's/.*package com.example.something;.*/package com.example.something_else;/' $i done 

基本上,脚本遍历目录中的所有java文件,并且每次出现package com.example.something; 替换为package com.example.something_else;