当前位置: 首页 > 知识库问答 >
问题:

javafx自包含包

翁俊良
2023-03-14

通过将以下代码片段复制到构建中,我使用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环境

共有1个答案

富涛
2023-03-14

您可以通过以下方式将Maven与Ant结合:

  • 为JDK定义Maven工件

为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.archMaven属性:

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)