【发布时间】:2012-10-26 06:32:51
【问题描述】:
我已经提取了一个包含 xml、java 类等的可执行 jar 文件。实际上这个可执行 jar 文件是一个具有依赖关系的库。我需要在这个库的一个类文件中修改一行代码。我已经成功编辑了类文件,现在我想将它重新打包到可执行的 jar 中。怎么做。
【问题讨论】:
标签: java
我已经提取了一个包含 xml、java 类等的可执行 jar 文件。实际上这个可执行 jar 文件是一个具有依赖关系的库。我需要在这个库的一个类文件中修改一行代码。我已经成功编辑了类文件,现在我想将它重新打包到可执行的 jar 中。怎么做。
【问题讨论】:
标签: java
只需将整个内容压缩回去,jar 只是一个 zip 文件。
例如,您可以使用 ant <jar> 任务将其自动化。
正如下面 cmets 所说,您可以使用 JDK 安装附带的 jar 工具。
jar -xvf your.jar 提取和jar -cvf your.jar inputfiles。
请参阅documentation。
使 JAR 可执行的原因在于它在其结构中包含一个位于 META-INF/MANIFEST.MF 的文件,该文件描述什么是入口点类,例如:
Manifest-Version: 1.0
Main-Class: foo.bar.FooBar
【讨论】:
使用 jar 命令你可以做到这一点
进入命令提示符并获取所有类所在的根文件夹。并使用 下面的命令
jar -cvf myjarname.jar *
* means all the files and folders in that location
【讨论】:
另外,请验证您是否具有可执行 jar 的文件关联。如果你不这样做,你可以用这个批处理文件创建这个关联:
@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
:: this script creates a file association for executable .jar files
ECHO Creating .jar file association...
ECHO JAVA_HOME is %JAVA_HOME%
IF NOT DEFINED JAVA_HOME GOTO :FAIL
REG ADD "HKCR\jarfile" /ve /t REG_SZ /d "Executable Jar File" /f
REG ADD "HKCR\jarfile\shell" /ve /f
REG ADD "HKCR\jarfile\shell\open" /ve /f
ECHO REG ADD "HKCR\jarfile\shell\open\command" /ve /t REG_SZ /d "\"%JAVA_HOME%\bin\javaw.exe\" -jar \"%%1\" %%*" /f
REG ADD "HKCR\jarfile\shell\open\command" /ve /t REG_SZ /d "\"%JAVA_HOME%\bin\javaw.exe\" -jar \"%%1\" %%**" /f
REG ADD "HKLM\jarfile" /ve /t REG_SZ /d "Executable Jar File" /f
REG ADD "HKLM\SOFTWARE\Classes\jarfile\shell" /ve /f
REG ADD "HKLM\SOFTWARE\Classes\jarfile\shell\open" /ve /f
REG ADD "HKLM\SOFTWARE\Classes\jarfile\shell\open\command" /ve /t REG_SZ /d "\"%JAVA_HOME%\bin\javaw.exe\" -jar \"%%1\" %%*" /f
ECHO Finished creating .jar file association for executable .jar files.
PAUSE
GOTO EOF
:FAIL
ECHO Script failed. JAVA_HOME not defined.
PAUSE
【讨论】: