簡體   English   中英

Java 文件看不到 maven 依賴項

[英]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 左上角看起來像“刷新按鈕”的按鈕

方法

正如詹姆斯建議的那樣:

  1. 使用正確的 JavaFX 依賴項,例如javafx-controls
  2. 最好從一個maven 項目開始,而不是一個壞掉的項目。
  3. 遵循openjfx.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

將模塊 package 和 class 名稱替換為您自己的名稱。

由於這是一個模塊化項目,除了 class 名稱之外,主要的 class 完全由模塊名稱和 package 名稱限定。 對於非模塊化項目,只需省略模塊名稱和斜線,例如刪除hellofx/以僅包含org.openjfx.App

附帶建議

我建議擺脫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 應用程序,該進程將沒有可用的 JavaFX 模塊。

您可以使用exec:exec然后指定要執行的java可執行文件,它將在單獨的進程中執行,但默認情況下它不會有模塊路徑。 您可以提供模塊路徑(據說通過使用-Dexec.args="%modulepath"的命令行,盡管這對我不起作用)或通過pom.xml中的配置,我試過了,但這也不起作用。 maven中的JavaFX個模塊定義的很奇怪,非分類依賴為空模塊,實際實現為分類依賴。 exec 插件模塊處理不夠智能,無法解決這個問題,因此無法找到 JavaFX 模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM