带有 Maven 的 JavaFX 与 exec 一起工作 :java but not in the jar at runtime

标签 java maven javafx

我想使用 maven 在任何平台上执行带有 JavaFX 的 jar,无论主机上是否安装了 JavaFX。

只要我用

运行我的类(class),这就有效
mvn exec:java

但是,我无法生成具有依赖项的 jar。在运行时,我得到以下(它编译)

 Error: JavaFX runtime components are missing, and are required to run this application.

在我的 pom 中,我有以下内容:

<dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>11</version>
</dependency>
...
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.6.0</version>
        <executions>
          <execution>
            <goals>
              <goal>java</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <mainClass>Gui</mainClass>
        </configuration>
</plugin>
<plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>Gui</mainClass>
            </manifest>
          </archive>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id> 
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
</plugin>

所以我不明白为什么它与 exec:java 一起工作(这意味着依赖关系没问题)而不是通过 jar...

最佳答案

正如 José Pereda 在评论中指出的那样,this答案解决了。 简而言之,我通过创建一个扩展 JavaFX 应用程序但不将此类作为 jar 中的主类的类来解决问题。相反,我将扩展应用程序的主要方法调用到我真正的主类中。

例子:

public class RealMain { //the class in the manifest
    public static void main(String[] args) {
        Gui.main(args);
    }
}

public class Gui extends Application{
    public static void main(String[] args) {
        launch();
    }
}

关于带有 Maven 的 JavaFX 与 exec 一起工作 :java but not in the jar at runtime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54258875/

相关文章:

Java - MySQL - 连接到 mysql 数据库时出错

java - Java中的Json数组

java - Java中如何从包内引用类

java - Eclipse (STS) 试图创建 appfuse-basic-jsf :RELEASE fails

java - 为什么 JavaFX 舞台/窗口/应用程序在更改场景后不刷新?

java - 我如何对我的数组列表进行排序?

java - 如何将 double 值设置为 "non-value"

Maven 3 回归 : Profile dependencies lost?

java - 指定使用引用初始化类和不使用引用初始化类之间的区别

java - JavaFX 8 可以设置默认菜单栏吗?