JavaFX Maven 插件:com.zenjava - 如何复制外部资源
JavaFX Maven Plugin: com.zenjava - How to copy external resources
我对 Maven + JavaFX 比较陌生,我正在尝试使用 com.zenjava maven 插件生成 JavaFX 可执行 jar 文件。
我正在遵循此指南以供参考:
https://www.youtube.com/watch?v=wbjW8rYlook
我的项目有以下文件夹结构:
现在我正在尝试 运行 在 Maven 构建期间配置 jfx:jar
并且能够生成一个 jar 文件但是我需要的资源没有复制到 target/jfx/app
文件夹下.
基本上,我想将整个 src/main/resources
文件夹复制到 target/jfx/app/resources
。我该如何实现?
一些信息:
src/main/resources/
文件夹将包含我在 运行 期间需要的各种文件(excel 文件、pdf、htmls...),而不仅仅是 属性 文件。
提前致谢。
============================================= ===========================
更新:
Yuri-M-Dias 的回答很有帮助。
在不更改任何其他设置的情况下,我设法通过更新我的 pom 文件来做到这一点:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>../jfx/app/resources</targetPath>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.7.0</version>
<configuration>
<mainClass>me.iamkenos.bayonetta.MainApp</mainClass>
</configuration>
</plugin>
</plugins>
</build>
这绝对有效,但我不确定这是否是最好的方法,因为我不得不通过在 <targetPath>../jfx/app/resources</targetPath>
中使用“../
”来作弊,将等待其他可能的方法暂时回答。
您可以使用 resources
关键字将 Maven 的输出文件夹控制到特定文件夹。例如,在我的项目中:
<resources>
<resource>
<directory>src/main/java/view</directory>
<targetPath>view</targetPath>
</resource>
</resources>
在这种情况下,我强制将 java/view
文件夹的内容输出到 target/classes/view
,因为这是我的 JavaFX 图像和 fxml 所在的位置。您可以对 jfx/app/resources
文件夹执行相同的操作。
关于复制文件夹,你可以看看official maven recommendation。
当您 运行 命令 jfx:jar
时,您将获得可执行文件 jar file with resources folder inside 因为您已将资源文件夹添加到构建路径。
如果您只是将整个 src/main/resources
文件夹复制到 target/jfx/app/resources
文件夹,您将拥有相同资源文件的副本(生成的 jar 文件的内部和外部),如果您需要允许用户编辑一些资源文件(例如 *.properties
文件)我猜你的代码将依赖于内部文件,因此用户更改在这种情况下没有任何影响。
这就是为什么您需要将项目资源拆分为:
- 内部(生成的 jar 文件的一部分,例如光栅图形和 read-only 配置)
- 外部(位于 jar 文件之外,例如用户可以编辑的配置文件)
我建议创建 3 个文件夹
\src\main\java
(源代码)- 构建路径的一部分
\src\main\resources
(内部)-构建路径的一部分
\src\main\config
(外部)- 从构建路径中排除
使用 maven 复制外部配置文件夹并构建可执行的 jfx jar
<build>
<resources>
<resource>
<directory>src/main/config</directory>
<targetPath>../jfx/app/config</targetPath>
</resource>
</resources>
</build>
<plugins>
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.8.3</version>
<configuration>
<vendor>${vendor}</vendor>
<mainClass>${mainClass}</mainClass>
<allPermissions>true</allPermissions>
</configuration>
</plugin>
</plugins>
最后一步是配置 symlink path to allow eclipse work in debug mode properly with external resources. You can use Link Shell Extension 来完成它。
对于 Windows 它可能看起来像
mklink /J C:\...\target\classes C:\...\target\jfx\app\config
LinkToFolder OriginalFolder
LinkToFolder
是编译后的 eclipse 项目文件夹 类
我对 Maven + JavaFX 比较陌生,我正在尝试使用 com.zenjava maven 插件生成 JavaFX 可执行 jar 文件。
我正在遵循此指南以供参考:
https://www.youtube.com/watch?v=wbjW8rYlook
我的项目有以下文件夹结构:
现在我正在尝试 运行 在 Maven 构建期间配置 jfx:jar
并且能够生成一个 jar 文件但是我需要的资源没有复制到 target/jfx/app
文件夹下.
基本上,我想将整个 src/main/resources
文件夹复制到 target/jfx/app/resources
。我该如何实现?
一些信息:
src/main/resources/
文件夹将包含我在 运行 期间需要的各种文件(excel 文件、pdf、htmls...),而不仅仅是 属性 文件。
提前致谢。
============================================= ===========================
更新:
Yuri-M-Dias 的回答很有帮助。
在不更改任何其他设置的情况下,我设法通过更新我的 pom 文件来做到这一点:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>../jfx/app/resources</targetPath>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.7.0</version>
<configuration>
<mainClass>me.iamkenos.bayonetta.MainApp</mainClass>
</configuration>
</plugin>
</plugins>
</build>
这绝对有效,但我不确定这是否是最好的方法,因为我不得不通过在 <targetPath>../jfx/app/resources</targetPath>
中使用“../
”来作弊,将等待其他可能的方法暂时回答。
您可以使用 resources
关键字将 Maven 的输出文件夹控制到特定文件夹。例如,在我的项目中:
<resources>
<resource>
<directory>src/main/java/view</directory>
<targetPath>view</targetPath>
</resource>
</resources>
在这种情况下,我强制将 java/view
文件夹的内容输出到 target/classes/view
,因为这是我的 JavaFX 图像和 fxml 所在的位置。您可以对 jfx/app/resources
文件夹执行相同的操作。
关于复制文件夹,你可以看看official maven recommendation。
当您 运行 命令 jfx:jar
时,您将获得可执行文件 jar file with resources folder inside 因为您已将资源文件夹添加到构建路径。
如果您只是将整个 src/main/resources
文件夹复制到 target/jfx/app/resources
文件夹,您将拥有相同资源文件的副本(生成的 jar 文件的内部和外部),如果您需要允许用户编辑一些资源文件(例如 *.properties
文件)我猜你的代码将依赖于内部文件,因此用户更改在这种情况下没有任何影响。
这就是为什么您需要将项目资源拆分为:
- 内部(生成的 jar 文件的一部分,例如光栅图形和 read-only 配置)
- 外部(位于 jar 文件之外,例如用户可以编辑的配置文件)
我建议创建 3 个文件夹
\src\main\java
(源代码)- 构建路径的一部分\src\main\resources
(内部)-构建路径的一部分\src\main\config
(外部)- 从构建路径中排除
使用 maven 复制外部配置文件夹并构建可执行的 jfx jar
<build>
<resources>
<resource>
<directory>src/main/config</directory>
<targetPath>../jfx/app/config</targetPath>
</resource>
</resources>
</build>
<plugins>
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.8.3</version>
<configuration>
<vendor>${vendor}</vendor>
<mainClass>${mainClass}</mainClass>
<allPermissions>true</allPermissions>
</configuration>
</plugin>
</plugins>
最后一步是配置 symlink path to allow eclipse work in debug mode properly with external resources. You can use Link Shell Extension 来完成它。
对于 Windows 它可能看起来像
mklink /J C:\...\target\classes C:\...\target\jfx\app\config
LinkToFolder OriginalFolder
LinkToFolder
是编译后的 eclipse 项目文件夹 类