【问题标题】:Why Launch4j does not find installed JDK?为什么 Launch4j 找不到已安装的 JDK?
【发布时间】: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。

official documentation 说:

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

标签: java launch4j


【解决方案1】:

您可以将launch4.jar 与您的jdk 一起启动,而不是将launch4j.exe 作为Windows 可执行文件启动。因此,在文件资源管理器中标记launch4j.jar,右键单击,选择打开方式,并引用您安装的jdk,例如打开 JDK 平台二进制文件

【讨论】:

  • 是的,但是 Launch4J 制作的可执行文件也有同样的问题(他们没有从采用openjdk.net 找到 JDK 16 安装)
【解决方案2】:

Launch4j 似乎受限于新的 Java 版本... 在上次更新中,他们显示了有关支持的 jvm 的详细信息,最后一个是 1.8.9,并且有一张关于符合 Java 9 及更高版本的票证... changelog and tickets launch4j

【讨论】:

    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 2020-11-14
    • 2011-05-21
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多