【问题标题】:JavaFX Maven Plugin: com.zenjava - How to copy external resourcesJavaFX Maven 插件:com.zenjava - 如何复制外部资源
【发布时间】:2017-07-04 03:25:19
【问题描述】:

我对 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>

这绝对有效,但我不确定这是否是最好的方法,因为我不得不在&lt;targetPath&gt;../jfx/app/resources&lt;/targetPath&gt; 中使用“../”来欺骗它,同时等待其他可能的答案。

【问题讨论】:

    标签: java maven javafx maven-plugin


    【解决方案1】:

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

    【讨论】:

    • 感谢您的提示!我让它工作,但我不确定我所做的是否是我能做的最好的解决方案。 (请参阅我的问题的更新)。在接受这个之前,我将等待更多可能的答案。至于给出的链接,我实际上是在看这个链接,但我无法理解maven-resources-plugin 的大部分内容,比如id、阶段、配置。我希望他们对该链接进行更多解释,以帮助新生。再次感谢!
    【解决方案2】:

    当您运行命令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 项目文件夹

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多