Java 创建可执行jar文件

Java 创建可执行jar文件,java,Java,我提取了一个包含xml、java类等的可执行jar文件。实际上,这个可执行jar文件是一个具有依赖关系的库。我需要修改这个库中某个类文件中的一行代码。我已经成功地编辑了类文件,现在我想把它重新打包到可执行jar中。如何做。只要把整个东西压缩回来,一个jar就是一个压缩文件 解压缩.jar 修改类 将整个结构重新压缩为.zip 将其重命名为.jar 好了 例如,您可以通过任务自动化它 正如下面的评论所说,您可以使用JDK安装附带的jar工具。 jar-xvf your.jar提取和jar-cvf

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

只要把整个东西压缩回来,一个jar就是一个压缩文件

  • 解压缩.jar
  • 修改类
  • 将整个结构重新压缩为.zip
  • 将其重命名为.jar
  • 好了
  • 例如,您可以通过任务自动化它

    正如下面的评论所说,您可以使用JDK安装附带的
    jar
    工具。
    jar-xvf your.jar
    提取和
    jar-cvf your.jar输入文件
    。 看

    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
    

    为什么要使用zip而不是jar工具?因为任何操作系统都带有zip/unzip,这是非常标准的。因为这样向OP解释似乎要简单得多,忽略了他并不真正知道罐子是如何工作的这一事实