Launch4J - 如何将依赖jar附加到生成的exe

时间:2013-11-11 23:21:44

标签: java jar launch4j

我有一个简单的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>

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

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

如何正确制作exe文件?

感谢您的帮助。

7 个答案:

答案 0 :(得分:16)

由于经常无法解决问题,我在StackOverflow上发布了...在发布问题后不久我就明白了。

所以我的问题的答案是:

将所有相关的罐子放入一个主罐子里。

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

为了帮助别人,我决定在这里发布详细说明 - 它们基于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

  2. 手动创建exe
  3. 然后我决定我想要更多自动化任务,我这样做了,Ant为我构建了exe(通过Launch4J)

  4. 然后我意识到我必须在我的自动化任务之前“清理并构建”(在第2点)/我决定我要干净并在构建之前自动完成构建

  5. 全部放在一起我附加了由点1,2,3组成的ant构建脚本:

    需要编辑build.xml并将下面的内容放在“project”结束标记

    之前
    <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文件夹中准备好: - )

答案 1 :(得分:2)

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

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

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

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

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

2)安装JSmooth,我建议你使用windows版本。

3)在左侧菜单上有一个按钮&#34;应用程序&#34;。点击它。

4)你会看到一个标签&#34; Classpath&#34;面板。单击加号(+)并添加外部.jar文件。就是这样!!

别忘了把你的.jar应用程序标记复选框&#34;使用am embedded jar&#34;并正确选择主类。它会起作用。

答案 2 :(得分:1)

答案 3 :(得分:1)

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

  1. 下载并安装launch4j。

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

  3. 确保您有一个名为&#39; dist&#39;的文件夹。在项目目录中。它将包含带有lib文件夹的jar文件(包含依赖库)。
  4. 打开发布4j。
  5. 在dist文件夹中创建输出文件。例如:OutputFile:D:****** \ My_App \ dist \ my_application.exe
  6. 浏览下一行的jar文件。例如:Jar:D:****** \ My_App \ dist \ my_application.jar
  7. 转到classpath选项卡。勾选CustomClasspath。按浏览图标,然后浏览到位于dist文件夹中的jar文件。
  8. 在JRE选项卡中指定Min Jre版本。
  9. 保存配送。
  10. 构建包装器(通过单击设置图标)
  11. 您的exe文件将在dist文件夹中生成。 多数民众赞成:)

答案 4 :(得分:1)

转换.jar文件时

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

Example

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

PS我将所有jar放在同一目录中。我正在使用3.12版