【问题标题】:Creating an executable jar file创建可执行的 jar 文件
【发布时间】:2012-10-26 06:32:51
【问题描述】:

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

【问题讨论】:

    标签: java


    【解决方案1】:

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

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

    例如,您可以使用 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
    

    【讨论】:

    • 为什么使用zip而不是jar工具?
    • 因为任何操作系统都带有 zip/unzip,这是非常标准的。而且因为用这种方式向 OP 解释似乎要简单得多,而忽略了他并不真正了解 jar 是如何工作的事实。
    【解决方案2】:

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

    进入命令提示符并获取所有类所在的根文件夹。并使用 下面的命令

     jar -cvf myjarname.jar *
    
    * means all the files and folders in that location
    

    【讨论】:

    • 简单的最佳答案:)
    【解决方案3】:

    另外,请验证您是否具有可执行 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-16
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2017-11-14
      • 2023-03-06
      相关资源
      最近更新 更多