5

是否可以将 jar 中的 .class 文件从默认包移动到另一个命名包,以便我可以导入和使用它们?

在这里浏览其他问题后,我认为 jarjar 可能正是我正在寻找的东西,但我不知道如何使用它。

所以我的问题是如何使用 jarjar 将 .class 文件从默认包重新打包到另一个命名包?

编辑:我想澄清一些事情 - 我没有要重新打包的 jar 的来源,所以我不知道如何重新编译代码。混淆和反射是不可能的。

EDIT2:使用 jarjar 看起来非常简单:) java -jar jarjar.jar process rules.rules in.jar out.jar

rules.rules 看起来像这样: rule a net.ylivay.src.a

问题解决了!

4

2 回答 2

1

您需要重新编译然后更改包 - 只需将类文件移动到 jar 内部(或外部)将无济于事。

于 2011-11-18T12:21:39.580 回答
1

要将类移动到不同的包中,不仅需要更改它们在 jar(或文件系统)目录结构中的位置,还需要更改package源文件中的声明,然后重新编译类。

与其尝试重新打包 jar,不如查看 Eclipse 等 IDE 中可用的强大重构工具,这些工具使这种事情变得简单。但是既然你说(更新你的问题)你没有源文件,那是不可能的。

另一种方法是创建代理类,使用反射在默认包中调用您需要的代理类。但这不仅令人不快,而且你说反思是不可能的。

所以你不能做你想做的事。

于 2011-11-18T12:22:44.573 回答