JavaFX 2.0 + NetBeans + Maven

6

我正在使用NetBeans 7.0.1创建JavaFX 2.0应用程序。当我按照标准方式创建项目时,一切都很顺利。不幸的是,我需要使用Maven项目...

我在Maven存储库中没有找到JavaFX 2.0,所以我的pom.xml现在看起来像这样:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>mygroup</groupId>
    <artifactId>ui</artifactId>
    <version>0.1</version>
    <name>My Project</name>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javafx</groupId>
            <artifactId>jfxrt</artifactId>
            <version>2.0</version>
            <type>jar</type>
            <scope>system</scope>
            <systemPath>${env.JAVAFX_HOME}\lib\jfxrt.jar</systemPath>
        </dependency>
    </dependencies>
</project>

已设置JAVAFX_HOME系统变量:


C:\Users\rach>echo %JAVAFX_HOME%
C:\Program Files\Oracle\JavaFX Runtime 2.0\

编译没有问题,但是当我在NetBeans下启动程序时,会出现错误:
Exception in thread "main" java.lang.NoClassDefFoundError: javafx/application/Application at java.lang.ClassLoader.defineClass1(Native Method)

然而 jfxrt.jar 已经在类路径中:

C:\>echo %CLASSPATH%
C:\Program Files\Oracle\JavaFX Runtime 2.0\lib\jfxrt.jar

当我从命令行启动我的应用程序时,它可以正常工作。

当我在运行时将jfxrt.jar安装到本地存储库中时,应用程序仍然无法启动,因为它找不到C:\Program Files\Oracle\JavaFX Runtime 2.0\bin\mat.dll。Pom.xml文件:

<dependency>
    <groupId>javafx</groupId>
    <artifactId>jfxrt</artifactId>
    <version>2.0</version>
    <type>jar</type>
</dependency>

效果:

Exception in thread "main" java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Can't load library: C:\Repositories\MavenRepo\javafx\jfxrt\bin\mat.dll at com.sun.javafx.tk.quantum.QuantumToolkit.startup(Unknown Source)

有什么想法吗?
3个回答

5
感谢您的帮助。
以下是使用JavaFX 2.0 SDK的简单步骤:
1. 在shell(命令提示符)中前往JavaFX 2.0 SDK\rt\lib目录 2. 执行mvn install:install-file -Dfile=jfxrt.jar -DgroupId=com.oracle -DartifactId=javafx -Dpackaging=jar -Dversion=2.0命令 3. 将JavaFX 2.0 SDK\rt\目录下的bin文件夹复制到.m2\repository\com\oracle\javafx目录下 4. 添加以下依赖: <dependency> <groupId>com.oracle</groupId> <artifactId>javafx</artifactId> <version>2.0</version> <scope>compile</scope> </dependency>

我的bin文件夹只包含一个文件:javafxpackager(mac)。这样可以吗?我应该将它复制到../javafx/还是../javafx/bin中?不幸的是,它无法工作 :-( 异常:Caused by: org.gradle.api.internal.artifacts.ivyservice.ModuleVersionNotFoundException: Could not find group:com.oracle, module:javafx, version:2.0 - Kai Wähner

3

对于当前捆绑Java FX 2.0的Java 7,最好的解决方案是:

<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>javafx</artifactId>
  <version>2</version>
  <systemPath>${java.home}/lib/jfxrt.jar</systemPath>
  <scope>system</scope>
</dependency>    

将以下内容添加到NetBeans中使用的Maven配置文件的"运行项目"操作中:
exec.classpathScope=compile

你还可以将其与“调试项目”,“分析项目”,“通过main()运行文件”,“通过main()调试文件”和“通过main()分析文件”操作一起使用 :)

2
现在看来,这似乎是一个可行的解决方案。
首先,安装 jfxrt.jar:
mvn install:install-file -Dfile=jfxrt.jar -DgroupId=com.oracle -DartifactId=javafx-runtime -Dpackaging=jar -Dversion=2.0

然后将从下载的JavaFX运行时中复制bin文件夹到本地Maven存储库(home/.m2/repository/com/oracle/javafx-runtime/)中。

虽然不太优雅,但对我很有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接