【发布时间】:2020-07-03 21:34:19
【问题描述】:
我的计算机上安装了 Launch4j 和 JDK,我正在尝试将 jar 文件转换为 exe。当我启动 Launch4j 时,我收到以下错误:
此应用程序需要 Java 运行时环境 1.6.0
我该如何解决这个问题?查找已安装 jres/jdks 的 Launch4j 搜索策略是什么?
JDK版本:
java -version
输出:
java 版本“14” 2020-03-17 Java(TM) SE Runtime Environment (build 14+36-1461) Java HotSpot(TM) 64 位服务器 VM(内部版本 14+36-1461,混合 模式,分享)
我在变量 PATH 和 JAVA_HOME 中都有 JDK 路径。我尝试卸载 JDK 并安装 JRE,但我首先需要使用 javac 命令将 *.java 编译为 *.class 文件。所以在这种情况下,我有不同版本的 JDK 和 JRE。
Launch4j 需要每个输出的 xml 配置文件 可执行文件。
所以我可以使用带有 jdkPreference 属性的 jre 标记来指定配置文件中公共 JRE 或私有 JDK 运行时的首选项。但是如何将其添加到 build.xml 文件中?
build.xml:
<project name="launch4j" default="compile" basedir=".">
<property name="src" location="src" />
<property name="lib" location="lib" />
<property name="build" location="build" />
<property name="jar" location="./${ant.project.name}.jar" />
<property name="launch4j.dir" location="." />
<property name="maven" location="maven" />
<path id="dist.classpath">
<pathelement path="${build}" />
<fileset dir="${lib}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="init">
<tstamp />
<mkdir dir="${build}" />
</target>
<target name="compile" depends="init" description="compile the source">
<javac srcdir="${src}" destdir="${build}" classpathref="dist.classpath" source="1.6" debug="on" includeantruntime="false" />
<copy todir="${build}/images">
<fileset dir="${src}/images">
<include name="**/*" />
</fileset>
</copy>
<copy todir="${build}">
<fileset dir="${src}">
<include name="**/*.properties" />
</fileset>
</copy>
</target>
<target name="jar" depends="compile" description="create jar">
<fileset dir="${lib}" id="lib.dist.fileset">
<include name="**/*.jar" />
</fileset>
<pathconvert pathsep=" " property="dist.classpath" refid="lib.dist.fileset">
<map from="${lib}" to="./lib" />
</pathconvert>
<!-- Put everything in ${build} into a jar file -->
<jar jarfile="${jar}">
<fileset dir="${build}" excludes="**/messages_es.properties" />
<manifest>
<attribute name="Main-Class" value="net.sf.launch4j.Main" />
<attribute name="Class-Path" value=". ${dist.classpath}" />
</manifest>
</jar>
</target>
<target name="demo" depends="jar" description="build the demos">
<ant dir="./demo/ConsoleApp" inheritAll="false" />
<ant dir="./demo/SimpleApp" inheritAll="false" />
</target>
<target name="clean" description="clean up">
<delete dir="${build}" />
<delete file="${jar}" />
<ant dir="./demo/ConsoleApp" target="clean" inheritAll="false" />
<ant dir="./demo/SimpleApp" target="clean" inheritAll="false" />
</target>
<target name="switch-to-maven" description="switch project to maven">
<copy todir="." overwrite="true">
<fileset dir="${maven}">
<include name="**/*" />
</fileset>
</copy>
<delete dir="${lib}" />
<mkdir dir="./target" />
</target>
</project>
谢谢
【问题讨论】:
-
Java 版本显示 JRE。如果要使用 javac,则需要命令行 PATH/JAVA_HOME 指向 JDK。 JDK 包括一个 JRE。你运行的是什么操作系统?
-
我正在运行 Windows 10。是的,变量 PATH 和 JAVA_HOME 指向 JDK。
-
javac -version 产生输出:javac 14
-
可以运行launch4j.exe吗?
-
相同的输出:此应用程序需要 Java 运行时环境 1.6.0