Java files dosen't see maven dependencies



所以我一直试图用maven设置我已经存在的项目,当我试图安装它时,我得到javafx。***并不存在于每个javafx导入。我试过改变项目结构,但它从来没有奏效。这是我的诗:

<?xml version="1.0" encoding="UTF-8"?>
<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>com.group-12</groupId>
<artifactId>snake</artifactId>
<version>1.0-SNAPSHOT</version>
<name>snake</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>19</maven.compiler.source>
<maven.compiler.target>19</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx</artifactId>
<version>19</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>test/main/java</testSourceDirectory> 
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

这是我的文件结构。


├── pom.xml
├── src
│   ├── main
│   │   └── java
│   │       └── com
│   │           └── group-12
│   │               ├── Controller.java
│   │               ├── Draw.java
│   │               ├── Food.java
│   │               ├── Fruits.java
│   │               ├── Game.java
│   │               ├── GameScene.fxml
│   │               ├── Grid.java
│   │               ├── GridPos.java
│   │               ├── Main.java
│   │               ├── MainGame.java
│   │               ├── Snake.java
│   │               ├── StartMenu.fxml
│   │               └── Window.java
│   └── test
│       └── java
│           └── com
│               └── group-12

我试着为不同的文件使用不同的包,但最后我只是把它们都放在同一个文件夹里。

我也在使用neovim,所以应该不是IDE的问题。

在我尝试切换到没有构建工具的maven之前,应用程序也运行得很好。

我确实添加maven到一个已经存在的项目前一段时间,我有同样的问题。我通过点击"realload All Maven projects"删除了它。按钮在Intellij。这个按钮看起来很像刷新按钮在maven窗口的左上角

方法

正如James建议的:

  1. 使用正确的JavaFX依赖项,例如javafx-controls
  2. 最好从一个可以工作的maven项目开始,而不是一个坏掉的maven项目。
  3. 遵循openjfix .io的官方文档。

使用javafx-maven-plugin通过Maven执行JavaFX应用

复制自插件文档(做了一些简化):

创建一个新的Maven项目,使用一个现有的项目,如HelloFX

JavaFX依赖项照常添加:

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

添加插件:

<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<configuration>
<mainClass>hellofx/org.openjfx.App</mainClass>
</configuration> 
</plugin>

运行项目:

mvn javafx:run

用你自己的名称替换模块、包和类名。

由于这是一个模块化项目,除了类名之外,主类还完全由模块名和包名限定。对于非模块化项目,只需去掉模块名称和斜杠,例如删除hellofx/只使用org.openjfx.App

<<p>

附带建议/strong>我建议去掉sourceDirectorytestSourceDirectory设置,因为你的值已经是默认布局,当你遵循约定优于配置的原则时,maven工作得最好。

此外,没有任何锁定的东西是真正需要的(我的意见,其他人可能会有不同的意见),所以删除pluginManagement中的所有内容。

不要使用exec-maven-plugin通过Maven执行JavaFX应用程序

回复你的评论:

我至少得到一个不同的错误,当我运行mvn clean install exec:java

Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.1.0:java (default-cli) on project snake: The parameters 'mainClass' for goal org.codehaus.mojo:exec-maven-plugin:3.1.0:java are missing or invalid -> [Help 1]

不要使用exec-maven-plugin来执行JavaFX应用程序,它不起作用。

exec:java目标将尝试在与maven进程相同的进程中运行JavaFX应用程序,maven进程将没有JavaFX模块可用。

你可以使用exec:exec,然后指定java可执行文件执行,它将在一个单独的进程中执行,但默认情况下它不会有模块路径。您可以提供模块路径(据说是通过使用-Dexec.args="%modulepath"的命令行,尽管这对我不起作用)或通过我尝试过的pom.xml中的配置,但这也不起作用。maven中的JavaFX模块被奇怪地定义为空模块,用于实际实现的非分类依赖和分类依赖。exec插件模块处理不够聪明,无法解决这个问题,所以找不到JavaFX模块。

最新更新