如何更改 JAR 中 类 的包名称?
How do I change the package name of classes inside a JAR?
典型问题 - 我有 x-1.0.jar
、x-2.0.jar
和 y-1.0.jar
。我想使用 x-2.0.jar
和 y-1.0.jar
但 y-1.0.jar
取决于 x-1.0.jar
.
有一个工具允许您将依赖项捆绑到一个 JAR 中并在内部更改包名称以避免冲突。例如,如果 "x" 包含软件包 "com.foo" 中的软件,则它可以将 x-1.0.jar
中的所有 类 更改为软件包 "old.com.foo" 中的软件,以及任何y-1.0.jar
中的引用,因此我们可以制作一个新的 JAR xy-1.0.jar
;这个 JAR 不会在 "com.foo" 包中包含任何公开暴露的 类,因此我们可以随意将它与 x-2.0.jar
一起使用而不会发生冲突。
问题是,我完全忘记了那个工具的名字!我们曾考虑在我的公司使用它一次,但我的管理层担心对 类 进行二进制级别的修改。但是现在(几年后)我们有一个类似的问题,只影响测试代码,所以我想再次提出。但是我完全忘记了名字!
我记得的事情:
- 托管在 Google 代码
上的开源
- 底层基于ObjectWeb ASM
- 我认为这个名字可能是某种描述的双关语
有谁知道这可能是什么工具?请帮帮我!
我记住了!该工具称为 JarJar Links。
典型问题 - 我有 x-1.0.jar
、x-2.0.jar
和 y-1.0.jar
。我想使用 x-2.0.jar
和 y-1.0.jar
但 y-1.0.jar
取决于 x-1.0.jar
.
有一个工具允许您将依赖项捆绑到一个 JAR 中并在内部更改包名称以避免冲突。例如,如果 "x" 包含软件包 "com.foo" 中的软件,则它可以将 x-1.0.jar
中的所有 类 更改为软件包 "old.com.foo" 中的软件,以及任何y-1.0.jar
中的引用,因此我们可以制作一个新的 JAR xy-1.0.jar
;这个 JAR 不会在 "com.foo" 包中包含任何公开暴露的 类,因此我们可以随意将它与 x-2.0.jar
一起使用而不会发生冲突。
问题是,我完全忘记了那个工具的名字!我们曾考虑在我的公司使用它一次,但我的管理层担心对 类 进行二进制级别的修改。但是现在(几年后)我们有一个类似的问题,只影响测试代码,所以我想再次提出。但是我完全忘记了名字!
我记得的事情:
- 托管在 Google 代码 上的开源
- 底层基于ObjectWeb ASM
- 我认为这个名字可能是某种描述的双关语
有谁知道这可能是什么工具?请帮帮我!
我记住了!该工具称为 JarJar Links。