java - 从 Eclipse 启动使用 Maven 配置的 JavaFX 应用程序

标签 java eclipse maven ubuntu javafx

我有一个可以与 Maven 一起正常运行的 JavaFX 应用程序:

mvn compile
mvn exec:java  # Launches the GUI

这是在 Ubuntu 上,使用 openjdk-11-jdkmavenopenjfx Ubuntu 包。

我想从 Eclipse IDE(使用 sudo snap install --classic eclipse 安装的 eclipse)编译和运行这个应用程序。我安装了 m2e(Maven 到 Eclipse)插件,并使用 File -> Import -> Maven -> Existing Maven Project 导入项目。对于非 JavaFX 项目,m2e 插件会执行从 Maven 的 pom.xml 在 Eclipse 中配置项目所需的一切。不幸的是,在我的例子中,缺少一些东西:类型检查工作正常并找到 javafx.* 类,但是当我尝试运行该应用程序时,我在控制台中收到以下错误消息:

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

解决方法是将应用程序作为 Maven 应用程序运行 (Run -> Run As -> Maven Build -> target=exec:java),但我发现它不太方便且速度较慢,所以我正在寻找一种方法让应用程序在 Eclipse 中直接作为 Java 应用程序运行。

我找到了手动配置 Eclipse 的方法(作为答案发布在下面),但我仍然想知道是否有更好的方法,让 Maven + m2e 完全完成这项工作,即尽可能多地配置所有内容pom.xml 并让 Eclipse 中的一切“正常工作”。

这个问题可以在一个极简主义的例子中重现,使用这个 pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>jfxpl</groupId>
  <artifactId>jfxpl</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>11.0.2</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.2</version>
    <configuration>
      <mainClass>App</mainClass>
    </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>8</source>
          <target>8</target>
        </configuration>
      </plugin>
      <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.5.0</version>
    <configuration>
      <mainClass>App</mainClass>
    </configuration>
      </plugin>
    </plugins>
  </build>
</project>

以及任何使用 JavaFX 的应用程序,例如:

import javafx.application.Application;
import javafx.stage.Stage;

public class App extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        System.out.println("Start!"); // Or real JavaFX stuff here obviously
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}

最佳答案

因为你有一个 Maven 项目,你可以简单地使用你正在使用的 Maven 插件的目标,并让 Eclipse(通过 m2e)为你运行它,但你必须指定哪个这些目标是什么,以及您想运行哪种配置。

假设您有这个 HelloFX样本。

您的 pom 将如下所示:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>12</release>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.3</version>
            <configuration>
                <mainClass>org.openjfx.hellofx.App</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

请注意,我使用的是 javafx-maven-plugin而不是 exec-maven-plugin,但您也可以使用它。前者负责将 JavaFX 模块添加到模块化路径,而后者根本不使用模块。

如果您在终端上,设置 JDK 12 并运行:

mvn clean javafx:run

将按预期工作。

但是,您希望从 Eclipse 而不是从终端运行它,因此您可以从 Run -> Run Configurations... -> Maven Build 创建一个新的 Maven Build 配置:

maven build

添加 clean javafx:ru​​n,并确保正确设置 JRE(例如 JDK 12)。按应用并关闭对话框。

现在您可以单击工具栏或上下文菜单中的Run as 绿色图标。将出现一个对话框,您只需选择 Maven Build 选项即可:

然后按 OK,它将按预期运行您的目标。

如果您没有创建任何运行配置,则选择Maven Build会要求您创建一个并提供所需的目标。这意味着当您单击运行按钮时,Eclipse 不会猜测您希望从您的 pom 运行哪些可能的目标。

请注意,您也可以按下拉图标,然后打开一个对话框,显示您的自定义配置:

Run hellofx configuration

hellofx 将运行指定的目标。

最后,您仍然可以将您的项目作为 Java 应用程序 运行,而没有像 Maven 这样的构建工具的好处,并且您必须添加 VM 参数(这意味着您需要下载 JavaFX首先是 SDK),如您的 answer .然后你可以从同一个下拉按钮运行这个其他配置(在我的例子中是 hellofx2)。

请注意,所有这些都已详细记录here .

关于java - 从 Eclipse 启动使用 Maven 配置的 JavaFX 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57159440/

相关文章:

java - 运行时保留策略 java 注释在 Weblogic 12C 中不起作用

java - 如何添加java项目依赖玩framework 2.2.1 java项目

eclipse - 您必须在 Angular CLI 项目中才能使用 serve 命令。运行动态 Web 项目时出错

maven - Jenkins 管道日志文件按并行阶段分离

git - 使用 Maven + Git 组织项目

java - 如何在 Solr 中添加/更新

java - 更改图表中的 Java 映射

java - 如何在 z/OS 上将 java 作为作业步骤运行

Eclipse 更新失败并显示消息 "Insufficient access privileges to apply this update"

java - maven 没有为 spring boot 项目创建 META-INF