从 Eclipse 启动使用 Maven 配置的 JavaFX 应用程序
Posted
技术标签:
【中文标题】从 Eclipse 启动使用 Maven 配置的 JavaFX 应用程序【英文标题】:Launch JavaFX application configured with Maven from Eclipse 【发布时间】:2019-12-01 05:19:12 【问题描述】:我有一个可以与 Maven 一起正常运行的 JavaFX 应用程序:
mvn compile
mvn exec:java # Launches the GUI
这是在 Ubuntu 上,使用 openjdk-11-jdk
、maven
和 openjfx
Ubuntu 软件包。
我想从 Eclipse IDE 编译和运行这个应用程序(安装了 sudo snap install --classic eclipse
的 Eclipse)。我安装了 m2e (Maven to 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);
【问题讨论】:
参见openjfx.io/openjfx-docs/#IDE-Eclipse,Maven 部分 谢谢,这确实有帮助,但并没有完全回答使用 Eclipse + Maven 的意义(以及没有让 m2e 自动配置所有内容的相关挫败感)。 你试过e(fx)clipse插件吗?我将它与 Java 8 一起使用,它为创建新的 JavaFX 项目、运行 JavaFX 应用程序、FXML 支持、CSS 支持等提供了良好的支持。 显示您的pom.xml
。是this the same issue?另见this m2e mailing list post。
JavaFX 在 Java 8 之后不受支持
【参考方案1】:
一种解决方案是手动配置Eclipse添加所需模块:Run -> Run configurations -> Java Application -> Arguments -> VM Arguments
,添加--module-path /path/to/JavaFX/lib --add-modules=javafx.controls
:
如果您需要其他模块,请将 then 指定为逗号分隔的列表,例如 --add-modules javafx.controls,javafx.fxml
。
【讨论】:
【参考方案2】:由于您有一个 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 构建配置:
添加clean javafx:run
,并确保正确设置了JRE(例如JDK 12)。按应用并关闭对话框。
现在您可以单击工具栏或上下文菜单中的Run as
绿色图标。将显示一个对话框,您只需选择Maven Build
选项:
然后按OK
,它将按预期运行您的目标。
如果您没有创建任何运行配置,则在选择 Maven 构建时会要求您创建一个并提供所需的目标。这意味着当您单击运行按钮时,Eclipse 不会从您的 pom 中猜测您要运行哪些可能的目标。
请注意,您也可以按下拉图标,然后打开一个对话框,显示您的自定义配置:
按hellofx
将运行指定的目标。
最后,您仍然可以以Java Application
的身份运行您的项目,而没有像 Maven 这样的构建工具的好处,并且您必须添加 VM 参数(这意味着您首先需要下载 JavaFX SDK) ,如您的answer。然后你可以从同一个下拉按钮运行这个其他配置(在我的例子中是hellofx2
)。
请注意,所有这些都详细记录在here。
【讨论】:
这就是我所说的“解决方法是将应用程序作为 Maven 应用程序运行”的意思,但是您的答案详细记录了它,这应该对其他读者有所帮助。谢谢! 所以,如果我说得对,您说使用 Maven 从 Eclipse 运行您的 Maven 项目是一种解决方法吗?作为 Java 应用程序,Eclipse 需要知道 VM 参数,因为 JavaFX 需要在模块路径中。作为 Maven 项目,您正在使用为您处理这些问题的插件(即 javafx-maven-plugin 或 exec-maven-plugin),因此您需要做的就是告诉 Eclipse 您想要运行哪些插件和目标)。 【参考方案3】:OpenJDK for linux 不附带 JAVAFX 框架。您需要下载并安装。
sudo apt-get install openjfx
安装后使用以下步骤:
Set the SDK first
第一步:
GOTO File -> Project Structure -> Modules -> Dependency >> + [on left-side of window] click + sign
第二步:
Run >> Edit Configurations
第三步:在虚拟机配置中添加以下参数:
--module-path /path/to/JavaFX/lib --add-modules=javafx.controls
【讨论】:
谢谢,但我不认为这比我在发布问题时提供的答案更好地回答问题 (***.com/questions/57159440/…)【参考方案4】:这可能是重复的,你试过了吗
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.8.3</version>
<configuration>
<mainClass>your.main.class.which.extends.javafx.Application</mainClass>
</configuration>
</plugin>
此处提供:JavaFX Application with Maven in Eclipse
此外,还有一些文档,可能与 Java 11 完全相关。
https://openjfx.io/openjfx-docs/
以下是文档提供的 OpenJFX 版本。
https://gluonhq.com/products/javafx/
还有,
https://openjfx.io/openjfx-docs/images/ide/eclipse/modular/maven/eclipse05.png
是通过 maven 构建的绝佳形象。
【讨论】:
以上是关于从 Eclipse 启动使用 Maven 配置的 JavaFX 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
eclipse从git下载的maven项目需要转成maven才可是使用main方法启动