这一定是一个很常见的问题。应用程序依赖于库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,但我想把它作为一次性活动)。
答案 0 :(得分:2)
答案 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任务来进行重构,然后重新启动旧库。