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

时间:2011-07-28 21:08:30

标签: java eclipse package packages packaging

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

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

7 个答案:

答案 0 :(得分:27)

如果包声明不再有效,那么所有这些无效声明都将出现在Eclipse的Problems视图中。如果您没有看到此视图,可以从Window->中打开它。显示视图 - >其他...... - >问题(在“常规”选项卡下)。

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

Quick fix for incorrect packages

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

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

Configure Problem Contents

Eclipse Configure Package Problems

答案 1 :(得分:22)

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

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

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

答案 2 :(得分:5)

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

答案 3 :(得分:1)

我遇到了同样的问题所以我写了一个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:)

答案 4 :(得分:1)

这应该适合你。

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

答案 5 :(得分:1)

这是一个老问题,但我遇到了同样的问题,写了一个非常简单的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;

答案 6 :(得分:0)

  • ALT+SHIFT+R在包名称的末尾添加下划线,按两次ENTER
  • ALT+SHIFT+R删除下划线ENTER两次

如果软件包很少,请完成。