我有一个简单的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文件?
感谢您的帮助。
答案 0 :(得分:16)
由于经常无法解决问题,我在StackOverflow上发布了...在发布问题后不久我就明白了。
所以我的问题的答案是:
将所有相关的罐子放入一个主罐子里。
花了一些时间才找到信息我该怎么做。
为了帮助别人,我决定在这里发布详细说明 - 它们基于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
然后我决定我想要更多自动化任务,我这样做了,Ant为我构建了exe(通过Launch4J)
然后我意识到我必须在我的自动化任务之前“清理并构建”(在第2点)/我决定我要干净并在构建之前自动完成构建
全部放在一起我附加了由点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)
提供帮助我的地方的不同链接
How to include all dependent Jars within a single non-executable jar?
How can I create an executable JAR with dependencies using Maven?
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/
答案 3 :(得分:1)
我将.jar迁移到exe时遇到了同样的问题。我也有很多依赖库。所以这些是我执行的步骤:
下载并安装launch4j。
在netbeans中打开您的项目。清理并构建项目。
答案 4 :(得分:1)
转换.jar文件时
答案 5 :(得分:0)
要在Launch4j中包含外部库,必须在.exe附近放置外部库的“ .jar”文件(我的文件位于同一文件夹中),然后在“ Classpath”中放入.jar的路径文件放入“编辑项目:”
答案 6 :(得分:0)
在launch4j中,转到“类路径”选项卡。勾选自定义类路径字段。在编辑字段中,输入要包含的每个罐子的完整路径,然后按接受。完成后,在单独的字段中键入主类的名称(即MyProg)。现在,所有罐子都将包含在exe中。
PS我将所有jar放在同一目录中。我正在使用3.12版