[英]Maven doesn't see dependencies which are JAR files in a subfolder
[英]Java files dosen't see maven dependencies
因此,我一直在嘗試使用 maven 設置我現有的項目,當我嘗試安裝它時,我得到 javafx。*** 對於每個 javafx 導入都不存在。 我試過改變項目結構,但它從來沒有奏效。 這是我的 pom:
<?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 添加到一個已經存在的項目中,但我遇到了同樣的問題。 我通過單擊 Intellij 中的“重新加載所有 Maven 項目”按鈕擺脫了它。 那就是 maven window 左上角看起來像“刷新按鈕”的按鈕
方法
正如詹姆斯建議的那樣:
javafx-controls
。 使用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
將模塊 package 和 class 名稱替換為您自己的名稱。
由於這是一個模塊化項目,除了 class 名稱之外,主要的 class 完全由模塊名稱和 package 名稱限定。 對於非模塊化項目,只需省略模塊名稱和斜線,例如刪除hellofx/
以僅包含org.openjfx.App
。
附帶建議
我建議擺脫sourceDirectory
和testSourceDirectory
設置,因為您的值已經是默認布局,並且 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 應用程序,該進程將沒有可用的 JavaFX 模塊。
您可以使用exec:exec
然后指定要執行的java
可執行文件,它將在單獨的進程中執行,但默認情況下它不會有模塊路徑。 您可以提供模塊路徑(據說通過使用-Dexec.args="%modulepath"
的命令行,盡管這對我不起作用)或通過pom.xml
中的配置,我試過了,但這也不起作用。 maven中的JavaFX個模塊定義的很奇怪,非分類依賴為空模塊,實際實現為分類依賴。 exec 插件模塊處理不夠智能,無法解決這個問題,因此無法找到 JavaFX 模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.