【问题标题】:How to rename all package names to lowercase如何将所有包名重命名为小写
【发布时间】:2020-03-06 21:11:02
【问题描述】:

我有一个大型项目,其中包含许多 CamelCase 包。我想将它们全部重命名为小写,例如:

main.MyPackages.Utils 到 main.mypackages.utils


最好/最快的方法是什么?

  1. 我想到的第一个方法是使用 IDE(Eclipse 就我而言),但这是很多工作,并不总是有效 因为在某些情况下它认为包已经存在。
  2. 第二种方法是自己编写一个程序来处理 这。该程序应将所有文件夹重命名为小写并替换 带有小写包的 java 文件中的所有 import 语句。 听起来比实际上更容易,因为重命名/移动非空目录需要一些额外的工作,而且在 Windows 上,无法使用 Java 创建具有小写名称的新目录。

有没有比上面提到的两种方法更好的方法?如果没有,我将采用方法二。也许使用 UNIX 操作系统会更好。

【问题讨论】:

  • 编写一个程序来处理这个问题几乎肯定需要更长的时间。
  • @AndyTurner,我认为他的意思是,在 Windows 上,如果“main.MyPackages.Utils”已经存在,则不可能创建新的包“main.mypackages.utils”。
  • @Simon 然后将其重命名为任意名称,删除目录(如果必须),然后再次重命名为所需的名称。
  • @AndyTurner 那是西蒙说的:java.io.File.mkdir 不创建文件并返回false,因为它不区分大写/驼峰式和小写。至少在 Windows 上。
  • @Simon 也可以参见 here 关于将文件重命名为小写;适应仅重命名目录。

标签: java eclipse package refactoring


【解决方案1】:

使用 Eclipse 重命名所有包:

我尝试使用 Eclipse 重命名包。很快我就遇到了这种方法的问题。我本地分支中主分支的第一次合并再次恢复了所有旧包。这个想法是在没有人参与该项目的周末重命名这些包。但是每个分支仍然需要 5+ 小时,我必须至少更改主分支和最后一个发布分支以防止合并冲突。我意识到这在我的情况下不起作用。

使用自定义 Java 程序重命名所有包:

我编写了一个 Java 程序,它执行以下步骤:

  1. 在所有目录的第一次迭代中,它将所有文件夹复制到一个只有小写名称的新目录中(第一个子包已完全重命名以防止 Windows 主机出现问题)。
  2. 然后程序通过新目录开始第二次迭代,并重命名 Java 文件中的所有导入包。对于大多数导入,这很简单,但我需要使用反射来正确重命名静态导入和 Java 类中枚举的导入,例如 import my.package.MyClass.MyEnum。
  3. 程序的下一步是重命名 Eclipse 中所有其他出现的旧包名称,例如TestNG XML 文件,...
  4. 最后一步是删除旧文件夹。

程序的运行时间约为每个分支 2 分钟。更新的项目编译,我没有遇到任何问题。


我没有添加任何代码,因为该程序仅适用于该项目。也许它仍然可以帮助某人。

【讨论】:

    【解决方案2】:

    在我的情况下,我使用 IntelliJ Idea IDE,并且提到的重构要容易得多。 您只需要右键单击并更改您提到的包名称,这将在每个使用它的地方更新包名称。 让我知道它是否有效。 See the screenshot for reference

    【讨论】:

      【解决方案3】:

      这可以通过使用中间包名称的两个步骤来执行:

      • 右击包main.MyPackages.Utils并选择Refactor -> Rename...
      • 输入main.mypackages2.utils2(如果有子包请查看Rename subpackages)并点击确定

      现在重复相同的操作并将main.mypackages2.utils2 重命名为main.mypackages.utils。

      【讨论】:

      • 我知道,但想象一下有一个包含大约 200 个或更多包的大项目。这不成比例。这将需要一些时间,同时其他开发人员会将他们的提交合并到 master 分支,这很可能会导致合并冲突。我想这是周末的任务。
      • @AndiCover 我不确定您为什么认为它无法扩展。它只是 IDE 执行的两个快速操作,而不是一个。
      • 我必须对所有包都这样做,而不仅仅是一个......问题中提到的包只是一个例子。我有更多的子包,几乎都使用 CamelCase。
      猜你喜欢
      • 2011-12-08
      • 1970-01-01
      • 2011-04-07
      • 2017-02-05
      • 1970-01-01
      • 2010-09-14
      • 2012-03-28
      • 2019-04-10
      • 2017-11-08
      相关资源
      最近更新 更多