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

Posted

技术标签:

【中文标题】Eclipse - 如何在整个项目中“将包声明更改为 ....”【英文标题】:Eclipse - How to "Change package declaration to ...." across an entire project 【发布时间】:2011-10-15 11:50:47 【问题描述】:

我刚刚在Eclipse中导入了大量源代码,基本上包名不再有效(代码已被移动文件夹)。有没有办法在包资源管理器中选择所有源代码并点击热键,以便为我正确解析所有包声明?我知道您可以通过选择源并点击 ctl-shift-o 来执行此操作,但也可以用于包声明?

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

反应很好 - 屏幕截图和所有 ;)【参考方案2】:

对于这个特殊的问题(通常带有自动生成的工件文件),我找到了一个巧妙的解决方案。

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

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

【讨论】:

太棒了!我已经使用 Eclipse 7 年了,但从未见过“替换...”按钮。【参考方案3】:

右键单击包,选择重构 > 重命名。这将使用新的包名称更新所有源文件。

【讨论】:

这不行,它需要你重命名包。我不想重命名或移动它们,我只需要将源代码中的“包 blah.blah.blah 更新到正确的包文件夹。 @Stephane,重构不起作用,因为重构不能修复您的错误,它会操纵没有错误的代码以不同的结构。您应该将新包移动到一个空的项目位置,重构它以匹配您在源中导入的使用过的 blah.blah.blah 包,将它与您的源一起移回,然后您可以按照您想要的方式重构。 这对我有用,因为我是在重命名包后完成的,然后转到 windows 操作系统并重命名文件夹,然后回到 eclipse 并重命名>重构。 如果你不想更改包名,它对我重命名并再次重命名【参考方案4】:

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

【讨论】:

【参考方案5】:

这应该对你有用。

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】: ALT+SHIFT+R在包名末尾添加下划线,点击ENTER两次 ALT+SHIFT+R删除下划线,ENTER两次

如果包很少,则完成。

【讨论】:

以上是关于Eclipse - 如何在整个项目中“将包声明更改为 ....”的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse搜索整个项目

eclipse中如何打开一个已经存在的项目

用eclipse修改jsp或者java文件,eclipse就编译整个项目,导致项目太大怎么解决?

如何在eclipse中,为整个工程生成javadoc文档

有没有办法在 Eclipse 中查找/替换整个项目?

Eclipse格式化整个项目