31

我有一个来自外部来源的 jar 文件。jar 中的所有类都在 com.xyz 包中。

我想将所有类移动到 com.xyzold 包中。

这是否像解压缩 jar、将 xzy 文件夹重命名为 xyzold 并重新压缩它一样简单,还是我还需要修改每个类文件?


这是我的解决方案,使用Jar Jar Links

java -jar jarjar-1.4.jar process rules.txt google-collections-1.0.jar google-collections-old-1.0.jar

这是我的 rules.txt 文件的内容:

rule com.google.** com.googleold.@1
4

6 回答 6

22

您可以使用Jar Jar Links来实现这一点。此外,您不需要要修改的类的源代码,因为程序是在字节码级别进行的(即它直接修改 .class 文件。)

于 2012-12-06T15:25:00.223 回答
1

你应该看看Jar Jar Links。(我对这个名字不承担任何责任:)。)

它的主要用例是将外部 jar 嵌入到您自己的 jar 中,为此,它可以重命名现有包。它改变了必要的字节码。你也许可以调整它来做你想做的事。

于 2012-12-06T15:24:44.683 回答
1

您可以在 Maven 构建中使用Maven shade 插件来执行此操作。

于 2012-12-06T15:25:56.663 回答
1

您可能可以使用ProGuard obfuscator来做到这一点。它当然可以在包中移动代码并在字节码级别运行。它的主要目的是混淆,因此当然应该首先考虑其他选项之一。

于 2012-12-06T15:29:55.670 回答
-4

不,您需要修改 jar 文件中的所有类。您需要有源代码才能更改包。

于 2012-12-06T15:21:33.080 回答
-4

您还需要修改所有 Java 源文件。不仅是包名,还有导入,以及任何可能的内联声明。真的不值得。

于 2012-12-06T15:21:45.197 回答