Launch4J – 如何将依赖的jar添加到生成的exe

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

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

典型的,我会说。

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

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

但它似乎是类path,这是我可以参考我的额外jar子唯一的地方。

exe文件创build后,我无法findexe文件中的依赖库(EXE可以用winrar打开),从而我的应用程序崩溃。

我怎样才能正确的exe文件呢?

谢谢你的帮助。

因为它经常发生无法解决问题,我发表了它StackOverflow …不久后发布的问题,我有一个想法。

所以我的问题的答案是:

把所有依赖的jar子放入一个主jar子中。

我花了一些时间来find信息,我该怎么做。

为了帮助我决定在这里发布详细的指导,他们基于Netbeans 7.4。

  1. 以下文章来自http://mavistechchannel.wordpress.com/2010/08/17/how-to-build-a-single-jar-file-with-external-libs/我创build了一个构buildone-jar-为我的应用程序。; 我可以通过Launch4J手动创buildexe

  2. 然后我决定我想要更多的自动化任务,而且我这样做,Ant为我构buildexe(通过Launch4J)

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

放在一起我附上我的ant生成脚本点1,2,3组成:

需要编辑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,然后select:运行目标/其他目标/ package-for-launch4j

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

把不同的地方,帮助我的链接

如何在一个不可执行的jar包中包含所有的依赖jar?

我怎样才能创build一个使用Maven的依赖关系的可执行JAR?

http://www.mkyong.com/java/how-to-make-an-executable-jar-file/

最重要的是

http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

快速啧啧

http://www.mkyong.com/java/how-to-add-your-manifest-into-a-jar-file/

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

这里的问题是:如何成功地把你的.JAR程序需要的外部jar放到你生成的.exe文件中。

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

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

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

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

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

4)你会看到一个标签“Classpath”面板。 点击加号(+)并添加你的外部.jar文件。 就是这样!

不要忘记把你的.jar应用程序标记checkbox“use am embedded jar”并正确地select主类。 它会工作。