是否有任何工具可以重命名Java库及其引用?

时间:2012-03-16 11:05:15

标签: java

这一定是一个很常见的问题。应用程序依赖于库A和库B.库A依赖于库C-v1(库C的版本1),库B依赖于库C-v2中的一些新引入的特性(库C的版本2)。当然,Library C-v2中有一些重大的重构,这意味着它不能向后兼容Library C-v1。但是Library C-v1和Library C-v2具有相同的包名和类名。

现在,应该可以有效地“重命名”库C-v1。例如,可以将名为com.example.MyClass的类重命名为old.com.example.MyClass。应该完全可以构建一个自动化工具,它采用二进制JAR并以这种方式更改所有包名称。

还应该可以更改依赖库中的引用。例如,应更改库A到库C中的任何引用以指向新包名称。

当然必须有一个工具可以做到这一点吗?

(PS:我确定一些聪明的人会提到OSGi,但我想把它作为一次性活动)。

4 个答案:

答案 0 :(得分:2)

jarjar按照你的要求行事:

  

您可以避免库依赖于库的特定版本的问题,这可能与另一个库的依赖项冲突。

将库重新打包到jar中并在此过程中重命名。它还包括一个Ant-Task。

答案 1 :(得分:1)

试试maven-shade-plugin。它会更改您指定的包:http://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html

答案 2 :(得分:0)

不,你所说的是大手术,而不是化妆品重命名。除了IDE和许多艰苦的思考之外,没有任何工具可以帮助实现这一目标。

如果这些图书馆来自第三方,则不能指望保留任何正确行为的保证或认证。

我同意这是一个问题(例如Spring和Hibernate依赖项之间的冲突),但你的解决方案不是可行的方法。这就是OSGi诞生的目的。

答案 3 :(得分:0)

如果您有源代码,可以创建一个Ant任务来进行重构,然后重新启动旧库。