通过将以下代码片段复制到构建中,我使用netbeans创建了javafx独立应用程序。xml文件
<target name ="-post-jfx-deploy">
<fx:deploy width="${javafx.run.width}" height="${javafx.run.height}"
nativeBundles="all"
outdir="${basedir}/${dist.dir}" outfile="${application.title}">
<fx:application name="${application.title}" mainClass="${javafx.main.class}"/>
<fx:resources>
<fx:fileset dir="${basedir}/${dist.dir}" includes="*.jar"/>
</fx:resources>
<fx:info title="${application.title}" vendor="${application.vendor}"/>
</fx:deploy>
</target>
我有x64位版本的jdk环境,所以它创建了只在x64位版本的窗口或操作系统中运行的应用程序。有人能告诉我应该如何改变部署方法,使应用程序在x86位系统上运行。默认情况下netbean占用了64位版本的jdk环境
您可以通过以下方式将Maven与Ant结合:
为JDK x86和JDK x64定义Maven工件。第一次听上去可能很奇怪,但在一个持续集成的环境中思考,这是有道理的。
您只需压缩一个普通的JDK文件夹,并将其作为Maven工件进行部署。
那么您的Maven项目将取决于:
<properties>
<jdk.version>1.8.112</jdk.version>
<!-- can be '64' or '32' -->
<cpu.arch>64</cpu.arch>
</properties>
</dependencies>
<!-- other dependencies goes here -->
<dependency>
<groupId>com.my.company</groupId>
<artifactId>jre-linux-${cpu.arch}</artifactId>
<version>${jre.version}</version>
<type>zip</type>
<scope>runtime</scope>
</dependency>
</dependencies>
注意:我在Debian上运行,但它也完全适用于视窗环境。
添加maven依赖插件
。它将复制所有依赖项(包括在依赖项部分定义的JDK zip文件)到/Target/dist/lib
文件夹。我们很快就会使用它。插件配置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>runtime</includeScope>
<outputDirectory>${application.dist}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
现在,在您的JavaFX蚂蚁任务之前,您必须告诉蚂蚁将您的JDK依赖项提取到文件夹中。必须在任务之前设置谁将捆绑您的JavaFX应用程序。
<unzip src="${application.dist}/lib/jdk-linux-${cpu.arch}-${jdk.version}.zip"
dest="${extra.dir}/jdk"/>
最后,在您的
<fx:deploy ...>
<fx:platform javafx="8.0+" basedir="${extra.dir}/jdk" />
</fx:deploy>
Maven日志将类似于此:
[INFO] --- maven-antrun-plugin:1.7:run (default) @ my-app ---
[INFO] Executing tasks
main:
[unzip] Expanding: /home/danilo/development/temp/my-app/target/dist/lib/jdk-linux-64-1.8.112.zip into /home/danilo/development/temp/my-app/target/extras/jdk
Using base JDK at: /home/danilo/development/temp/my-app/target/extras/jdk/jre
Using base JDK at: /home/danilo/development/temp/my-app/target/extras/jdk/jre
Creating app bundle: /home/danilo/development/temp/my-app/target/dist/bundles/my-app
Debian packages should specify a license. The absence of a license will cause some linux distributions to complain about the quality of the application.
Using default package resource [menu icon] (add package/linux/my-app.png to the class path to customize)
Using default package resource [Menu shortcut descriptor] (add package/linux/my-app.desktop to the class path to customize)
Using default package resource [DEB control file] (add package/linux/control to the class path to customize)
Using default package resource [DEB preinstall script] (add package/linux/preinst to the class path to customize)
Using default package resource [DEB prerm script] (add package/linux/prerm to the class path to customize)
Using default package resource [DEB postinstall script] (add package/linux/postinst to the class path to customize)
Using default package resource [DEB postrm script] (add package/linux/postrm to the class path to customize)
Using custom package resource [DEB copyright file] (loaded from package/linux/copyright)
dpkg-deb: construindo pacote 'my-app' em '/home/danilo/development/temp/my-app/target/dist/bundles/my-app-1.0.deb'.
Package (.deb) saved to: /home/danilo/development/temp/my-app/target/dist/bundles/my-app-1.0.deb
Config files are saved to /tmp/fxbundler8773603423891700338/linux. Use them to customize package.
Bundler RPM Bundle skipped because of a configuration problem: Can not find rpmbuild {0} or newer.
Advice to fix: Install packages needed to build RPM, version {0} or newer.
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8:34.875s
[INFO] Final Memory: 22M/253M
[INFO] ------------------------------------------------------------------------
当您需要在x86环境上交付应用程序时,只需在构建时重写
cpu.arch
Maven属性:
mvn -Dcpu.arch=32 clean install
现在,设置持续集成就更容易了。例如,如果使用Jenkins CI,可以创建两个不同的作业并根据需要运行它。
我将整个项目推送到Github存储库。你可以在这里查看:https://github.com/daniloguimaraes/javafx-multiple-jre-versions
我已经和这件事斗争了一天多,在SO和其他地方读了很多帖子,但我仍然有问题。 我需要在一个自包含的JavaFX应用程序包中包含我的应用程序图标。我使用的是JDK1.8.0_45及其包含的JavaFX包。我正在使用Maven构建.exe,除了我不能包含我的图标外,它都运行得很好。 下面是我的pom.xml: 使图标出现在标题栏中的是javapackager部署步骤的参数。这一行告诉inno安装程序使用
按照这里和这里的指示。我使用的是JDK7U9和NetBeans 7.2.1。我所做的是创建相对于我的项目根文件夹的整个路径(C:\users\administrator\desktop\icotest\package\windows\icotest.ico)。我同时尝试了48x48和256x256的大小。下面是我的项目Icotest的树状结构概述: 这就是build.xml的样子:
转换为fxml 我总是从javafx.fxml.loadException类型中得到错误代码:也许有比创建自定义类更好的解决方案。但我需要一个标签与自定义接口(连接)。也许另一个解决方案是创建一个只包含标签的fxml文件,并通过接口为此设置一个控制器类。 编辑:
为了完整起见,我使用Oracle JDK 1.8.0_66 for Mac。
for(int i)for(int j)gridpane.add(“the_composed_view_in_the_other_fxml”,i,j)