2

我已经提取了一个包含 xml、java 类等的可执行 jar 文件。实际上这个可执行 jar 文件是一个具有依赖关系的库。我需要在这个库的一个类文件中修改一行代码。我已经成功编辑了类文件,现在我想将它重新打包到可执行的 jar 中。怎么做。

4

3 回答 3

6

只需将整个内容压缩回去,jar 只是一个 zip 文件。

  1. 解压 .jar
  2. 修改类
  3. 将整个结构重新压缩为 .zip
  4. 将其重命名为 .jar
  5. 你去吧。

例如,您可以使用ant<jar>任务将其自动化。

正如下面的评论所说,您可以使用jarJDK 安装附带的工具。 jar -xvf your.jar提取和jar -cvf your.jar inputfiles。请参阅文档

使 JAR 可执行的原因在于它在其结构中包含一个文件,该文件META-INF/MANIFEST.MF描述什么是入口点类,例如:

Manifest-Version: 1.0
Main-Class: foo.bar.FooBar
于 2012-10-26T06:35:27.027 回答
2

使用 jar 命令你可以做到这一点

采取命令提示符并获得所有类的根文件夹。并使用以下命令

 jar -cvf myjarname.jar *

* means all the files and folders in that location
于 2012-10-26T06:39:27.697 回答
0

此外,验证您是否具有可执行 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
于 2012-11-25T19:26:43.850 回答