我在intellij中的jar资源文件是只读的,我需要编辑它们
My jar resource files in intellij are read only and I need to edit them
几个小时以来,我一直在尝试编辑我用作库的 jar 中的 java 文件,但均未成功。我已将资源标记为内容根和源根,但我仍然无法编辑 jars 中的代码。该项目编译并运行正常,但我需要对资源文件进行调整,但不能;我已经尝试了我能想到的每一个项目结构。这是不可能的吗?感谢所有帮助。
不建议编辑JAR 文件。从重现性1的角度来说,最好是:
- 获取库的源代码树
- 将其签入您的 版本控制(或将其分叉到Github)
- 修改并构建它
- 使用生成的 JAR 而不是原始 JAR
另一种方法是 "overlay" 通过使用替代版本的资源创建另一个 JAR 并将其放置在应用程序类路径的较早位置来进行您想要进行的更改。
但是如果这些都不适合您,您可以使用命令行中的 jar
命令来修改 JAR 文件:
- 使用
jar -x ...
将文件提取到临时目录树
- 应用需要对树所做的任何更改
- 使用
jar -c ....
从树中创建一个新的 JAR。
阅读 jar
命令的手册条目以获取更多详细信息。如果您不是原始签名者,使用原始密钥对新 JAR 进行签名将是一个问题,但我怀疑这与您相关。
1 - 关键是下一个维护你的代码的人需要知道你对你 "edited" 的库 JAR 做了什么,以防他需要做同样的过程另一个版本的 JAR。如果您手动完成,他别无选择,只能对原始版本和您编辑的版本之间的差异进行取证比较。并且假设仍然可以获得原始 JAR。请注意,"the next guy" 可能是您...在几个月或几年后,当您完全忘记自己所做的事情时。
几个小时以来,我一直在尝试编辑我用作库的 jar 中的 java 文件,但均未成功。我已将资源标记为内容根和源根,但我仍然无法编辑 jars 中的代码。该项目编译并运行正常,但我需要对资源文件进行调整,但不能;我已经尝试了我能想到的每一个项目结构。这是不可能的吗?感谢所有帮助。
不建议编辑JAR 文件。从重现性1的角度来说,最好是:
- 获取库的源代码树
- 将其签入您的 版本控制(或将其分叉到Github)
- 修改并构建它
- 使用生成的 JAR 而不是原始 JAR
另一种方法是 "overlay" 通过使用替代版本的资源创建另一个 JAR 并将其放置在应用程序类路径的较早位置来进行您想要进行的更改。
但是如果这些都不适合您,您可以使用命令行中的 jar
命令来修改 JAR 文件:
- 使用
jar -x ...
将文件提取到临时目录树 - 应用需要对树所做的任何更改
- 使用
jar -c ....
从树中创建一个新的 JAR。
阅读 jar
命令的手册条目以获取更多详细信息。如果您不是原始签名者,使用原始密钥对新 JAR 进行签名将是一个问题,但我怀疑这与您相关。
1 - 关键是下一个维护你的代码的人需要知道你对你 "edited" 的库 JAR 做了什么,以防他需要做同样的过程另一个版本的 JAR。如果您手动完成,他别无选择,只能对原始版本和您编辑的版本之间的差异进行取证比较。并且假设仍然可以获得原始 JAR。请注意,"the next guy" 可能是您...在几个月或几年后,当您完全忘记自己所做的事情时。