Java Launch4J-如何将依赖JAR附加到生成的exe
我有一个简单的java项目,它需要外部JAR。 我使用netbeans构建它,在Clean和build命令之后,我可以在dist目录中找到以下结构:Java Launch4J-如何将依赖JAR附加到生成的exe,java,jar,launch4j,Java,Jar,Launch4j,我有一个简单的java项目,它需要外部JAR。 我使用netbeans构建它,在Clean和build命令之后,我可以在dist目录中找到以下结构: -myApp.jar -lib/ library1.jar library2.jar 我会说,这是典型的 现在,我想将myApp.jar和相关库作为一个exe分发。 这可能吗?我正在尝试使用Launch4J。在我创建配置文件的GUI中,cp部分有一些选项 lib/swing-layout-1.0.4.jar 但它似乎是类路径
-myApp.jar
-lib/
library1.jar
library2.jar
我会说,这是典型的
现在,我想将myApp.jar和相关库作为一个exe分发。
这可能吗?我正在尝试使用Launch4J。在我创建配置文件的GUI中,cp部分有一些选项
lib/swing-layout-1.0.4.jar
但它似乎是类路径,并且它是我唯一可以参考我的额外jar的地方
创建exe文件后,我在exe中找不到依赖的库(exe可以用winrar打开),因此我的应用程序崩溃
那么我怎样才能正确地创建exe文件呢
谢谢你的帮助。将帮助过我的地方链接起来 最重要的是 快速啧啧
由于经常发生无法解决问题的情况,我将其发布在StackOverflow上。。。发表这个问题后不久,我有了一个想法 因此,我的问题的答案是: 将所有相关罐子放入一个主罐子。 我花了一些时间来寻找信息,我怎么能做到这一点 为了帮助人们,我决定在这里发布详细的说明——它们基于Netbeans 7.4
然后在Netbeans中右键单击build.xml并选择:
运行Target/Other Targets/package-for-launch4j
exe文件夹中的exe文件已准备就绪:-)我已为此问题花费了数小时。这就是我的贡献 这里的问题是:如何成功地将.JAR程序所需的外部JAR放入生成的.exe中 我们假设您已经在eclipse/netbeans上正确地配置了外部jar,并且所有这些都可以使用命令java-jaryourprogram.jar正常工作 所以真正的问题是如何确保这个.EXE文件将包含外部JAR,否则它将无法正常工作 1) 首先,您需要忘记Launch4J和其他任何程序 2) 安装JSmooth,我建议您使用windows版本 3) 在左侧菜单上有一个按钮“应用程序”。点击它 4) 您将看到一个选项卡“Classpath”面板。单击加号(+)并添加外部.jar文件。就这样
不要忘了将.jar应用程序标记复选框“UseAmEmbeddedJAR”并正确选择主类。将.jar迁移到exe时,我也遇到了同样的问题。我也有很多依赖库。我执行了以下步骤:
要在Launch4j中包含外部库,您必须将外部库的“.jar”文件放在.exe附近(我的文件就在同一个文件夹中),然后在“Classpath”中,将.jar文件的路径放入Launch4j中的“编辑项:”,转到Classpath选项卡。勾选自定义类路径字段。在编辑字段中,输入要包含的每个jar的完整路径,然后按accept。完成后,只需在单独的字段(即MyProg)中键入主类的名称。所有JAR现在都将包含在exe中
PS我所有的JAR都在同一个目录中。转换.jar文件时,我使用的是3.12版
我有使用Eclipse创建可执行jar的经验。这里的过程很简单。谢谢,我没有机会切换到Eclipse。似乎我必须将所有依赖的jar打包到一个jar中,这将解决这个问题。您也可以不用切换到eclipse。问题是你们需要像.exe这样的可执行文件还是一个可执行jar就可以了。它是唯一需要执行的指向类的清单文件。我记得这一点,因为当我在同一个问题上时,我在图坦卡蒙中学得到了一些帮助。正如您将注意到的,拥有正确的清单文件是您评论的关键所在。我肯定需要一个exe文件,而不是jar。实际上
<cp>lib/swing-layout-1.0.4.jar</cp>
<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>