如何使用 jarjar 从默认包中重新打包 .class 文件?

YLi*_*vay 5 java default package jarjar

是否可以将 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

问题解决了!

sud*_*ode 1

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

您或许应该看看 Eclipse 等 IDE 中提供的强大重构工具,而不是尝试重新打包 jar,这使得此类事情变得简单。但既然你说(在更新你的问题时)你没有源文件,那是不可能的。

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

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