JavaFX Maven插件:com.zenjava - 如何复制外部资源

时间:2017-02-15 12:47:38

标签: java maven javafx maven-plugin

我对Maven + JavaFX比较陌生,我正在尝试使用com.zenjava maven插件生成一个JavaFX可执行jar文件。

我遵循本指南以供参考:
https://www.youtube.com/watch?v=wbjW8rYlook

我的项目有以下文件夹结构:
enter image description here

现在我正在尝试在maven构建期间运行config jfx:jar并且能够生成一个jar文件,但我需要的资源不会复制到target/jfx/app文件夹下。

enter image description here

基本上,我想将整个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>”来欺骗它,等待其他可能的答案与此同时。

2 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:1)

当您运行命令jfx:jar时,您将获得可执行文件jar file with resources folder inside,因为您已将资源文件夹添加到构建路径。

如果您只是将整个src/main/resources文件夹复制到target/jfx/app/resources文件夹,您将拥有相同资源文件的副本(在生成的jar文件的内部和外部),如果您需要允许用户编辑一些资源文件(例如*.properties文件)我猜你的代码将依赖于内部文件,因此用户更改在这种情况下没有任何影响。

这就是为什么你需要将项目资源分成:

  • 内部(生成的jar文件的一部分,例如光栅图形和只读配置)
  • 外部(位于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路径,以允许eclipse在调试模式下与外部资源一起正常工作。您可以使用Link Shell Extension来执行此操作。

对于Windows,它可能看起来像

mklink /J C:\...\target\classes C:\...\target\jfx\app\config
LinkToFolder                    OriginalFolder

LinkToFolder是带有编译类的eclipse项目文件夹