Исполняемый файл Linux не работает с использованием javafx-maven-plugin

У меня есть многомодульный проект maven с запущенным JavaFX. Я могу создать файл jar, содержащий все классы, которые могут быть выполнены через сборку maven, поэтому я знаю, что упакованный пакет работает. Для удобства я хочу создать собственный пакет / исполняемый файл с помощью javafx-maven-plugin < / а>

<profile>
    <id>build-installer</id>
    <properties>
    <native.output.dir>${project.build.directory}/jfx/native/${project.build.finalName}</native.output.dir>
    <native.output.dir.app>${native.output.dir}/app</native.output.dir.app>
    <native.output.dir.security>${native.output.dir}/runtime/jre/lib/security</native.output.dir.security>
    <native.app.jar>${native.output.dir.app}/${project.build.finalName}-jfx.jar</native.app.jar>
    </properties>
    <dependencies>
    <dependency>
        <groupId>ch.sahits.game</groupId>
        <artifactId>OpenPatricianDisplay</artifactId>
        <version>${project.version}</version>
    </dependency>
    </dependencies>
    <build>

    <plugins>

        <plugin>
        <groupId>com.zenjava</groupId>
        <artifactId>javafx-maven-plugin</artifactId>
        <version>8.1.2</version>
        <configuration>
            <mainClass>ch.sahits.game.OpenPatrician</mainClass>
            <verbose>true</verbose>
        </configuration>
        <executions>
            <execution>
            <phase>package</phase>
            <goals>
                <goal>native</goal>
            </goals>
            </execution>
        </executions>
        </plugin>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.7</version>
        <executions>
            <execution>
            <id>create zip archive</id>
            <phase>install</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>

                <echo>Creating self-contained zip</echo>
                <zip destfile="${project.build.directory}/OpenPatrician-${project.version}.zip" basedir="${native.output.dir}" />

                </target>
            </configuration>
            </execution>
        </executions>
        </plugin>

    </plugins>
    </build>

</profile>

Это отлично работает в Windows, создает исполняемый файл, который можно запустить. Однако выполняя то же самое в Linux, Maven работает, но исполняемый файл не запускается должным образом с этими двумя сообщениями:

OpenPatricianDisplay-0.5.0-SNAPSHOT Не указан основной класс
OpenPatricianDisplay-0.5.0-SNAPSHOT Не удалось запустить JVM

Взглянув на cfg-файлы пакета Windows и Linux, можно увидеть, что они разные. При замене Linux на версию из Windows создаются другие ошибки. Поэтому я не думаю, что причина в том, что они разные. Создание демонстрационного приложения JavaFX с одним модулем с помощью плагина в Linux работает. Чтобы выяснить, является ли это плагином Maven или базовым упаковщиком, я попробовал следующее: Примеры Ant. Пример Hello World работает нормально (глава 10.4.1), однако при попытке примера с внешними файлами jar (глава 10.4.3) даже сборка не выполняется:

СБОЙ СБОЙ
/home/andi/eclipse/intellij/jdk1.8.0_60/demo/javafx_samples/src/Ensemble8/build.xml:34: необходимо указать хотя бы один набор файлов для упаковки.

Файл build.xml

<?xml version="1.0" encoding="UTF-8" ?>

<project name="Ensemble8 JavaFX Demo Application" default="default" basedir="."
  xmlns:fx="javafx:com.sun.javafx.tools.ant">

  <property name="JAVA_HOME" value="/usr/lib/jvm/java-8-oracle"/>

  <path id="CLASSPATH">
    <pathelement location="lib/lucene-core-3.2.0.jar"/>
    <pathelement location="lib/lucene-grouping-3.2.0.jar"/>
    <pathelement path="classes"/>
  </path>

  <property name="build.src.dir" value="src"/>
  <property name="build.classes.dir" value="classes"/>
  <property name="build.dist.dir" value="dist"/>

  <target name="default" depends="clean,compile">

    <taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
      uri="javafx:com.sun.javafx.tools.ant"
      classpath="${JAVA_HOME}/lib/ant-javafx.jar"/>

      <fx:application id="ensemble8"
        name="Ensemble8"
        mainClass="ensemble.EnsembleApp"/>

      <fx:resources id="appRes">
    <fx:fileset dir="${build.dist.dir}" includes="ensemble8.jar"/>
        <fx:fileset dir="lib"/>
        <fx:fileset dir="${build.classes.dir}"/>
      </fx:resources>

      <fx:jar destfile="${build.dist.dir}/ensemble8.jar">
        <fx:application refid="ensemble8"/>
        <fx:resources refid="appRes"/>
      </fx:jar>

      <fx:deploy outdir="." embedJNLP="true"
        outfile="ensemble8"
        nativeBundles="all">

        <fx:application refId="ensemble8"/>

        <fx:resources refid="appRes"/>

        <fx:info title="Ensemble8 JavaFX Demo Application"
          vendor="Oracle Corporation"/>

      </fx:deploy>

  </target>

  <target name="clean">
    <mkdir dir="${build.classes.dir}"/>
    <mkdir dir="${build.dist.dir}"/>

    <delete>
      <fileset dir="${build.classes.dir}" includes="**/*"/>
      <fileset dir="${build.dist.dir}" includes="**/*"/>
    </delete>

  </target>

  <target name="compile" depends="clean">

    <javac includeantruntime="false"
      srcdir="${build.src.dir}"
      destdir="${build.classes.dir}"
      fork="yes"
      executable="${JAVA_HOME}/bin/javac"
      source="1.8"
      debug="on"
      classpathref="CLASSPATH">
    </javac>

    <!-- Copy resources to build.classes.dir -->

      <copy todir="${build.classes.dir}">
        <fileset dir="src/app/resources"/>
        <fileset dir="src/generated/resources"/>
        <fileset dir="src/samples/resources"/>
      </copy>

  </target>

</project>

Таким образом, похоже, что примеры не обновлены до версии Java 1.8.0_60. Единственное отличие build.xml от примера - это путь к JAVA_HOME.

Есть ли у кого-нибудь идеи: а) как подойти к проблеме со сборкой муравья, чтобы доказать / опровергнуть, что проблема заключается в упаковщике, или б) еще лучше иметь некоторое представление о том, в чем может быть проблема при запуске плагина maven.

Среда: Linux Mint 17.2 KDE

  • JDK 1.8.0_60
  • Муравей 1.9.3
  • Maven 3.0.5
  • javafx-maven-плагин 8.1.4

person hotzst    schedule 26.09.2015    source источник
comment
Почему вы используете maven-antrun-plugin? Весь смысл использования javafx-maven-plugin состоит в том, чтобы избежать использования ant или какой-либо зависимости от файлов ant. У меня есть небольшой проект, для которого я создал пакеты без каких-либо проблема в Windows, Ubuntu и Mac с использованием плагина maven.   -  person ItachiUchiha    schedule 26.09.2015
comment
Вам также не нужно передавать <execution> конфигурацию плагину, если вы не хотите, чтобы она была частью жизненного цикла maven. Поскольку нативная сборка занимает некоторое время, лучший и более чистый способ сделать это - запускать mvn jfx:native из командной строки всякий раз, когда это необходимо.   -  person ItachiUchiha    schedule 26.09.2015
comment
Я намерен использовать javafx-maven-plugin, однако, поскольку он в настоящее время не работает в Linux, я попробовал подход с помощью ant (вообще не беспокоясь о maven), чтобы узнать, проблема ли это в упаковщике или плагине maven.   -  person hotzst    schedule 26.09.2015
comment
Можете ли вы добавить детали среды?   -  person ItachiUchiha    schedule 26.09.2015
comment
Я только что перепроверил плагин на Linux Mint 17.2, все работает отлично. Пакет debian создан и работает после двойного щелчка по нему. Вы можете клонировать мой проект и запустить mvn jfx:native на своем компьютере.   -  person ItachiUchiha    schedule 26.09.2015
comment
Я бы хотел, чтобы клонирование вашего проекта (MediaPlayerFX) и создание сборки создали бы исполняемый исполняемый файл, так как у него нет модулей, однако он не работает с той же ошибкой. Думая о JDK: я получаю его через этот репозиторий: deb ppa.launchpad.net/webupd8team/java / ubuntu trusty main, я проверю, можно ли это воспроизвести при использовании JDK, загруженного из oracle.   -  person hotzst    schedule 27.09.2015
comment
Использование JDK от Oracle вызывает ту же ошибку.   -  person hotzst    schedule 27.09.2015
comment
Единственный обходной путь, который я могу придумать, - это запустить вашу сборку в другой среде Linux. Ваш проект с открытым исходным кодом?   -  person ItachiUchiha    schedule 27.09.2015
comment
Да, это так: sourceforge.net/projects/openpatrician с URL-адресом проверки SVN svn checkout svn.code.sf.net/p/openpatrician/code/trunk/OpenPatrician. Однако попытка на другой машине (под управлением CentOS 5) была одним из первых, что я попробовал.   -  person hotzst    schedule 27.09.2015


Ответы (1)


Это, по крайней мере, частичный ответ на вопрос о сборке для ant. Как оказалось, документация устарела, но я понял это, когда взглянул на определение задачи Ant.

Для работы <fx:jar> элементам требуется еще несколько дочерних элементов:

  <fx:application id="ensemble8"
    name="Ensemble8"
    mainClass="ensemble.EnsembleApp"/>

  <fx:resources id="appRes">
    <fx:fileset dir="${build.dist.dir}" includes="ensemble8.jar"/>
    <fx:fileset dir="lib"/>
    <fx:fileset dir="${build.classes.dir}"/>
  </fx:resources>

  <fx:jar destfile="${build.dist.dir}/ensemble8.jar">
    <fx:application refid="ensemble8"/>
    <fx:resources refid="appRes"/>
    <fx:fileset dir="${build.classes.dir}"/>
 <!-- Customize jar manifest (optional) -->
<manifest>
    <attribute name="Implementation-Vendor" value="Samples Team"/>
    <attribute name="Implementation-Version" value="1.0"/>
<attribute name="Main-Class" value="ensemble.EnsembleApp" />
</manifest>
</fx:jar>

Особенно <manifest> и <fx:fileset>. Имея это на месте, я могу создать демонстрационное приложение как собственный исполняемый пакет.

РЕДАКТИРОВАТЬ: Первоначальная проблема с javafx-maven-plugin, оказывается, связана с самим упаковщиком и поиском файла конфигурации. Обновление до версии 8.1.5 и добавление <bundler>linux.app</bundler> в <configuration> - это обходной путь, пока не исчезнет проблема. исправлено в JDK.-

person hotzst    schedule 03.10.2015
comment
Просто для других читателей, которые обнаруживают этот SO-вопрос: проблема / ошибка в пакете oracle начинается с обновления Java 1.8.0 40 и до сих пор не исправлена ​​(сегодня: 22 ноября 2015 г.). Другая проблема возникает из-за обновления Java 1.8.0 60, можно установить пользовательскую среду выполнения JRE, но существует ошибка при записи CFG-файла - person FibreFoX; 22.11.2015