【问题标题】:JavaFX 2 as a Maven dependency [duplicate]JavaFX 2作为Maven依赖项[重复]
【发布时间】:2012-03-06 20:51:42
【问题描述】:

是否可以在 pom.xml 中将 JavaFX 2.0 引用为 Maven 中的依赖项,以便一切顺利进行?

我在this question 中看到可以在本地安装 jfxrt.jar,但理想情况下,我想要一种更简单的方法,可以在没有任何本地黑客的情况下正确解决和下载依赖项....

【问题讨论】:

    标签: java maven javafx-2


    【解决方案1】:

    不,目前不存在这样的解决方案。我怀疑它永远不会,因为从 Java 1.7 update 2 开始,JavaFX 与 JVM 一起安装。计划从 Java 1.8(明年)开始在 JRE 中包含 JavaFX。从那时起,你就完全不需要依赖了。

    但是,您现在已经可以将 Maven 与 JavaFX 一起使用,因为 Maven 可以调用 Ant 任务(antrun 插件),并且 JavaFX 发行版中提供了超级 Ant 任务。我写了一篇关于它的博客,但它是用法语写的:Creer un projet Maven pour JavaFX2。它会引导您完成整个过程。不过,如果您不懂法语,请在文章中发表评论,我会尽力帮助您或在the Oracle forum查看这里

    【讨论】:

    • 除了这个已经很好的回复,我只想指出 Adam Bien 的帖子:adam-bien.com/roller/abien/entry/how_to_compile_java_fx
    • JavaFX 将从 Java JDK [11] 中删除:infoworld.com/article/3261066/java/… - 同时有人可以创建面向未来的虚拟依赖或类似的东西?
    • 这个答案不再有用。它几乎没有用,因为它只是一个仅链接的答案,但是博客文章不再可用并且 JavaFX 已从 JDK 中删除,因此第一段也是不真实的。
    • 如果有人像我一样通过谷歌来到这里,这一切似乎都已经过时了。我发现实际上有 Maven Central 工件可供使用,比较 search.maven.org/search?q=org.openjfx
    【解决方案2】:

    Sergey 的文章建议添加 javafx 作为系统依赖,不应该使用。相反,您可以在 POM 中包含以下内容以自动安装 javafx。

        <profile>
            <id>install-javafx</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-install-plugin</artifactId>
                        <version>2.3.1</version>
                        <executions>
                            <execution>
                                <id>install-javafx</id>
                                <goals>
                                    <goal>install-file</goal>
                                </goals>
                                <phase>validate</phase>
                                <configuration>
                                    <file>${jfx-runtime}/lib/jfxrt.jar</file>
                                    <groupId>javafx</groupId>
                                    <artifactId>javafx</artifactId>
                                    <version>${jfx-version}</version>
                                    <packaging>jar</packaging>
                                    <javadoc>${jfx-runtime}/../docs/api.zip</javadoc>
                            <!--<sources>no source available</sources>-->
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>                    
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>install-javafx-bin</id>
                                <phase>validate</phase>
                                <goals>
                                    <goal>copy-resources</goal>
                                </goals>
                                <configuration>
                                    <outputDirectory>${settings.localRepository}/javafx/javafx</outputDirectory>
                                    <useBuildFilters>false</useBuildFilters>
                                    <resources>
                                        <resource>
                                            <directory>${jfx-runtime}</directory>
                                            <includes>
                                                <include>bin/*.dll</include>   
                                            </includes>
                                        </resource>
                                    </resources>              
                                </configuration>            
                            </execution>
                        </executions>
                    </plugin>
                </plugins>    
            </build>
        </profile>
    

    如果您想安装 api 文档,请将 docs/api 文件夹的内容压缩到 docs/api.zip。现在您只需运行 maven,激活配置文件并设置 jfx-runtime 和 jfx-version 属性。

    【讨论】:

    • 我第一次看到这个解决方案,并确信这是正确的方法。希望这是最提倡的方式。你建议我们如何处理${jfx-runtime}${jfx-version}。只是在&lt;properties/&gt; 部分硬编码它们?
    • 我在属性中硬编码了版本,因为这样我可以在依赖项中重用它。运行时路径不应硬编码,因为它取决于平台。
    • 这是避免系统依赖的典型“正确”/认可方式。这也是典型的极其复杂的方式(避免系统依赖)
    • @Cephalopod jfx-runtime 的可能值是多少? (不是硬编码路径)。
    【解决方案3】:

    这是一个可能的解决方案。

    在您的项目目录中创建一个lib 文件夹并将jfxrt.jar 放入该目录。

    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>javafx</artifactId>
      <version>2.2.3</version>
      <scope>system</scope>
      <systemPath>${project.basedir}/lib/jfxrt.jar</systemPath>
    </dependency>
    

    如果你想构建一个可执行的jar,你只需要包含javafx-maven-plugin。欲了解更多信息,请参阅:link-to-github

    <plugin>
          <groupId>com.zenjava</groupId>
          <artifactId>javafx-maven-plugin</artifactId>
          <version>1.3</version>
          <configuration>
              <mainClass>[put your application main class here]</mainClass>
          </configuration>
    </plugin>
    

    【讨论】:

    • 我使用 java.home 而不是 project.basedir,这意味着我不需要将 jfxrt.jar 放入我的项目中。
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2011-07-31
    • 2017-04-09
    • 2016-01-16
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多