【问题标题】:Launch4J - how to attach dependent jars to generated exeLaunch4J - 如何将依赖 jar 附加到生成的 exe
【发布时间】:2019-05-06 00:45:21
【问题描述】:

我有一个简单的 java 项目,它需要外部 jar。 我用 netbeans 构建它,在 Clean and Build 命令之后,我可以在 dist 目录中找到以下结构:

-myApp.jar
-lib/
     library1.jar
     library2.jar

典型的,我会说。

现在,我想将带有依赖库的 myApp.jar 作为一个 exe 文件进行分发。 这可能吗?我正在尝试使用 Launch4J。在我创建配置文件的 GUI 中,cp 部分中有一些选项

<cp>lib/swing-layout-1.0.4.jar</cp>

但它似乎是类路径,它是我唯一可以引用我的额外 jar 的地方。

创建exe文件后,我在exe中找不到依赖库(exe可以用winrar打开),因此我的应用程序崩溃了。

那我怎样才能正确制作exe文件呢?

感谢您的帮助。

【问题讨论】:

  • 我有使用 Eclipse 创建可执行 jar 的经验。那里的过程很简单。
  • 谢谢,没有机会为我切换到 Eclipse。看来我必须将所有依赖的 jar 打包到一个 jar 中,这将解决问题。
  • 您也可以不用切换到 Eclipse。问题是你需要像.exe这样的可执行文件还是一个可执行的jar就可以了。它只需要执行指向该类的清单文件。我记得这一点,因为当我在同一个问题上时,我得到了一些帮助。您会注意到拥有正确的清单文件是诀窍
  • 感谢您的 cmets。我绝对需要一个exe文件而不是jar。与此同时,我找到了链接mavistechchannel.wordpress.com/2010/08/17/…,它帮助我构建了一个包含所有依赖 jar 的 jar。一旦我得到一个罐子,我的 Lanuch4J 生成的 exe 就可以正常工作了。
  • 是的,这是一个很好的解决方法。生成包含所有依赖项的单个工作 jar,然后使用 launch4j 生成可执行 exe

标签: java jar launch4j


【解决方案1】:

由于经常无法解决问题,因此我将其发布在 StackOverflow 上......并且在发布问题后不久我就有了一个想法。

所以我的问题的答案是:

将所有依赖的 jar 放入一个主 jar。

我花了一些时间才找到信息,我该怎么做。

为了帮助人们,我决定在这里发布详细说明 - 它们基于 Netbeans 7.4。

  1. http://mavistechchannel.wordpress.com/2010/08/17/how-to-build-a-single-jar-file-with-external-libs/ 的以下文章中,我创建了为我构建 one-jar-app 的 ant 脚本。 然后我可以通过 Launch4J 手动创建 exe

  2. 然后我决定我想要更自动化的任务,我做到了,Ant 为我构建了 exe(通过 Launch4J)

  3. 然后我意识到我必须在我的自动化任务之前执行“清理和构建”(在第 2 点)/我决定我希望在 exe 构建之前自动完成清理和构建

    李>

总而言之,我附上了由点 1、2、3 组成的我的 ant 构建脚本:

需要编辑build.xml并将下面找到的内容放在“项目”结束标记之前

<target name="package-for-launch4j" depends="clean,compile,jar">
    <property name="launch4jexe.dir" location="C:\Program Files (x86)\Launch4j" />
    <taskdef name="launch4j"
             classname="net.sf.launch4j.ant.Launch4jTask"
             classpath="${launch4jexe.dir}/launch4j.jar
            :${launch4jexe.dir}/lib/xstream.jar" />
    <property name="launch4j.jar.name" value="MyAppJarName"/>
    <property name="launch4j.dir" value="exe"/>
    <property name="launch4j.jar" value="${launch4j.dir}/${launch4j.jar.name}.jar"/>
    <echo message="Packaging ${application.title} into a single JAR at ${launch4j.jar}"/>
    <delete dir="${launch4j.dir}"/>
    <mkdir dir="${launch4j.dir}"/>
    <jar destfile="${launch4j.dir}/temp_final.jar" filesetmanifest="skip">
        <zipgroupfileset dir="dist" includes="*.jar"/>
        <zipgroupfileset dir="dist/lib" includes="*.jar"/>
        <manifest>
        <attribute name="Main-Class" value="${main.class}"/>
        </manifest>
    </jar>
    <zip destfile="${launch4j.jar}">
        <zipfileset src="${launch4j.dir}/temp_final.jar"
            excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
    </zip>
    <delete file="${launch4j.dir}/temp_final.jar"/>
    <launch4j configFile="misc/l4j-myapp.xml" />
</target>

然后在 Netbeans 中右键单击 build.xml 并选择: 运行目标/其他目标/package-for-launch4j

exe文件已在exe文件夹中准备好:-)

【讨论】:

  • 因为它是一个 ant 脚本,它甚至可以用于 Eclipse 或命令行。
  • 很高兴知道。此外,在 netbeans 中,可以创建快捷方式(右键单击 build.xml 中展开的 ant 目标),因此无需通过 Run Target / Other Targets / package-for-launch4j。
【解决方案2】:

当你转换你的 .jar 文件时

  1. 转到类路径选项卡
  2. 检查自定义类路径
  3. 在主类上,在构建项目后从 dist 文件夹中选择您的 .jar
  4. 在类路径 textarea 中添加您的库,然后在其下方添加它们 textarea 写入库的完整路径(当然包括 lib,即“C:\folder\lib\file.jar”)

【讨论】:

    【解决方案3】:

    我在这个问题上花了几个小时。这是我的贡献。

    这里的问题:如何成功地将您的 .JAR 程序需要的外部 jar 放入您生成的 .exe 中。

    我们假设您已经正确地在 eclipse/netbeans 上配置了外部 jar,并且使用以下命令一切正常:java -jar yourprogram.jar。

    所以真正的问题是如何确保这个.EXE文件将包含外部jar,否则将无法正常工作。

    1) 首先,您需要忘记 Launch4J 和任何其他程序。

    2) 安装JSmooth,推荐使用windows版本。

    3) 在左侧菜单中有一个“应用程序”按钮。点击它。

    4) 您将看到一个选项卡“类路径”面板。单击加号 (+) 并添加您的外部 .jar 文件。就是这样!!

    不要忘记将您的 .jar 应用程序标记复选框“使用嵌入式 jar”并正确选择主类。它会起作用的。

    【讨论】:

      【解决方案4】:

      在将 .jar 迁移到 exe 时,我也遇到了同样的问题。我也有很多依赖库。所以这些是我执行的步骤:

      1. 下载并安装launch4j。

      2. 在 netbeans 中打开您的项目。清理并构建项目。

      3. 确保项目目录中有一个名为“dist”的文件夹。它将包含您的 jar 文件和 lib 文件夹(包含依赖库)。
      4. 打开启动 4j。
      5. 在 dist 文件夹中创建输出文件。例如:输出文件:D:******\My_App\dist\my_application.exe
      6. 在下一行浏览您的 jar 文件。例如:Jar : D:******\My_App\dist\my_application.jar
      7. 转到类路径选项卡。勾选自定义类路径。按浏览图标,然后浏览到位于 dist 文件夹中的 jar 文件。
      8. 在 JRE 选项卡中指定 Min Jre 版本。
      9. 保存配置。
      10. 构建包装器(通过单击设置图标)
      11. 您的 exe 文件将在 dist 文件夹中生成。 就是这样:)

      【讨论】:

        【解决方案5】:
        【解决方案6】:

        要在 Launch4j 中包含外部库,您必须在 .exe 附近拥有外部库的“.jar”文件(我的只是在同一个文件夹中),然后在“Classpath”中输入 .jar 的路径文件放入“编辑项目:”

        【讨论】:

          【解决方案7】:

          在 launch4j 中转到类路径选项卡。勾选自定义类路径字段。在编辑字段中,输入要包含的每个 jar 的完整路径,然后按接受。完成后,将主类的名称输入单独的字段(即 MyProg)。现在所有的 jar 都将包含在 exe 中。

          PS 我所有的 jar 都在同一个目录中。我使用的是 3.12 版

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多