我有一个启动并运行JavaFX的多模块maven项目。我可以创建一个包含所有可通过maven程序集执行的类的jar文件,因此我知道打包的包工作。 为方便起见,我想使用javafx-maven-plugin
创建本机包/可执行文件MyNode mn = new MyNode(5);
Node n = mn; // A raw type - compiler throws an unchecked warning
n.setData("Hello");
Integer x = mn.data; // Causes a ClassCastException to be thrown.
这在Windows上工作正常,创建一个可以运行的exe文件。无论如何在Linux上执行相同的操作,Maven都会运行,但可执行文件无法正确启动这两条消息:
OpenPatricianDisplay-0.5.0-SNAPSHOT没有指定的主类
OpenPatricianDisplay-0.5.0-SNAPSHOT无法启动JVM
看一下Windows和Linux软件包的cfg文件,可以看出它们是不同的。使用Windows中的Linux替换Linux时,会创建不同的错误。所以我不认为它们不同的事实是原因。 使用Linux上的插件创建单个模块JavaFX演示应用程序。要弄清楚它是Maven插件还是底层打包器,我尝试了以下Ant examples。 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
<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>
因此看起来Java 1.8.0_60的示例并不是最新的。与示例中的build.xml唯一不同的是JAVA_HOME的路径。
有没有人知道: a)如何使用ant构建来解决问题,以证明/反驳打包器是问题所在 b)更好地了解运行maven插件时可能出现的问题。
环境: Linux Mint 17.2 KDE
答案 0 :(得分:1)
这至少是针对ant构建问题的部分答案。事实证明,documentation已过时,但在查看Ant task definition时我发现了它。
<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中修复了issue .-