我有一个简单的 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文件呢?
感谢您的帮助。
最佳答案
由于经常发生无法解决问题的情况,我将其发布在 StackOverflow 上……发布问题后不久我就有了一个想法。
所以我的问题的答案是:
将所有的依赖jar放到一个主jar中。
我花了一些时间才找到有关如何做到这一点的信息。
为了帮助人们,我决定在这里发布详细的说明 - 它们基于 Netbeans 7.4。
以下文章来自 http://mavistechchannel.wordpress.com/2010/08/17/how-to-build-a-single-jar-file-with-external-libs/我创建了为我构建 one-jar-app 的 ant 脚本。 然后我可以通过 Launch4J 手动创建 exe
然后我决定我想要更多的自动化任务,我做到了,Ant 为我构建了 exe(通过 Launch4J)
然后我意识到我必须在我的自动化任务之前执行“清理和构建”(第 2 点)/我决定我希望在 exe 构建之前自动完成清理和构建
<
综合起来,我附上了由第 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 文件夹中准备就绪:-)
关于java - Launch4J - 如何将依赖的 jar 附加到生成的 exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19917960/