Почему Launch4j не находит установленный JDK? - PullRequest
0 голосов
/ 23 марта 2020

У меня на компьютере установлены Launch4j и JDK, и я пытаюсь конвертировать jar-файл в exe. Когда я запускаю Launch4j, я получаю следующую ошибку:

Для этого приложения требуется Java Среда выполнения 1.6.0

Как это исправить? Какова стратегия поиска Launch4j для поиска установленных jres / jdks?

Версия JDK:

java -version

Вывод:

java версия "14" 2020 -03-17 Java (TM) SE Runtime Environment (сборка 14 + 36-1461) Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 14 + 36-1461, смешанный режим, совместное использование)

У меня есть JDK-путь в обеих переменных PATH и JAVA_HOME. Я попытался удалить JDK и установить JRE, но сначала мне нужно скомпилировать файлы *. java в * .class с помощью команды javac. Так что в этом случае у меня есть разные версии JDK и JRE.

Официальная документация гласит:

Launch4j требует файл конфигурации xml для каждого вывода исполняемый файл.

Так что я могу использовать тег jre с атрибутом jdkPreference , чтобы указать предпочтение для publi c JRE или частной среды выполнения JDK в конфигурации файл. Но как я могу добавить это для сборки. 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>

Спасибо

...