我有一个较旧的Jar文件,我必须修改它才能使其工作。我已经用jd-gui对其进行了反编译,并更改了需要更改的部分。我现在想知道我必须做什么才能拿回一个罐子?我想我必须添加库,但是没有额外的lib目录。
我如何把所有的东西放在一起?
@Stephen C“因此,当您进行更改并重新编译时,生成的".class”文件可能会意外地出现“这到底是如何相关的?我只想要Jar文件的功能,而不是它的1:1副本。
Jar文件是未签名的。那么签署Jar文件的原因到底是什么呢?如果我从另一个程序开始呢?
发布于 2020-11-09 00:34:40
如果在反编译整个jar之后遗漏了依赖项,这可能意味着jar没有包含它们。在创建jar时,您可以选择不在其中包含依赖项,但这假设它们在运行时在类路径上可用。在运行原始jar时,检查是否与类路径上的其他jar文件有任何关系。有关如何实现这一点的详细信息,请参阅this answer。一旦确定了所有依赖项,就可以很容易地从IntelliJ/Eclipse或command line等集成开发环境编译jar。
顺便说一句,如果您希望对jar进行的更改很小或者是孤立的,我建议您编辑字节码(对于小的编辑来说要容易得多)。我更喜欢this bytecode editor。
如果在代码的某些部分上反编译失败,jar的功能将不会在重新编译时恢复。在这种情况下,我建议您确定您正在尝试编辑的类集,修改其余类,使它们编译并且不会对您感兴趣的类产生任何副作用(不要删除这些类引用的任何内容),然后编译jar (即使这不是您想要的jar ),而不是遍历所有可用的反编译器并希望能够反编译代码。然后,您可以只从jar中extract您想要修改的类文件,并在原始jar中对它们进行overwrite。只有当您的更改没有任何副作用时,这才会起作用。
发布于 2020-11-08 10:31:45
例如,使用gradle或maven的jar插件,或者使用intelliJ构建它,这是另一篇文章中的答案:How to build jars from IntelliJ properly?
发布于 2020-11-08 10:43:56
如果您正在询问如何创建JAR:
jar工具执行此操作;请参阅Oracle Java官方教程中的How to create a JAR file。但它不能保证你正在做的事情会真正起作用。这里有几个问题。
我猜我必须添加库,但是没有额外的lib目录。
我不知道你这么说是什么意思。JAR的(新)依赖项不一定要在JAR本身中。这取决于它是什么类型的JAR;例如,它是使用java -jar my.jar ...启动的所谓的“可执行”JAR吗?
https://stackoverflow.com/questions/64734289
复制相似问题