Maven kann die Abhängigkeit für das Modul in demselben Projekt mit mehreren Modulen nicht auflösen

Lesezeit: 5 Minuten

Benutzer-Avatar
Benjamin George Roberts

Beim Ausführen von Befehlen wie z

mvn dependency:build-classpath

oder

mvn exec:java

Maven ist nicht in der Lage, eine Abhängigkeit eines meiner Module von einem anderen aufzulösen.

[ERROR] Fehler beim Ausführen des Ziels in der Projekt-Parser-App: Abhängigkeiten für Projekt Projektgruppe:A:jar:0.1-SNAPSHOT konnten nicht aufgelöst werden: Artefakt Projektgruppe:B:jar:0.1-SNAPSHOT konnte nicht gefunden werden

Die Projektstruktur ist wie folgt:

/pom.xml
/A/pom.xml
/B/pom.xml

Der Elternpom ist wie folgt:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>project_group</groupId>
  <artifactId>parent</artifactId>
  <packaging>pom</packaging>
  <version>0.1-SNAPSHOT</version>
  <name>parent</name>

  <modules>
    <module>A</module>
    <module>B</module>
  </modules>

Das erste untergeordnete Modul (dasjenige, das die Abhängigkeit nicht auflösen kann):

    <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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>parent_group</groupId>
    <artifactId>parent</artifactId>
    <version>0.1-SNAPSHOT</version>
  </parent>
  <artifactId>A</artifactId>
  <packaging>jar</packaging>
  <name>A</name>

  <dependencies>
    <dependency>
      <groupId>parent_group</groupId>
      <artifactId>B</artifactId>
      <version>0.1-SNAPSHOT</version>
    </dependency>

Das zweite untergeordnete Modul (die Abhängigkeit):

  <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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>parent_group</groupId>
    <artifactId>parent</artifactId>
    <version>0.1-SNAPSHOT</version>
  </parent>
  <artifactId>B</artifactId>
  <packaging>jar</packaging>
  <name>B</name>

  • Versuchen Sie, die Build-Struktur auszutauschen, ich meine, schreiben Sie Ihre pom.xml neu, um B A zu haben. Klassen in Modul A brauchen Klassen aus Modul B, dann muss B erst gebaut werden

    – Saurabh Jhunjhunwala

    18. April 2015 um 4:29 Uhr

  • keine Änderung, soweit ich wusste, sollte der Reaktor die Reihenfolge aus den Abhängigkeiten herausarbeiten

    – Benjamin George Roberts

    18. April 2015 um 5:09 Uhr

  • Korrigieren Sie, dass der Reaktor die Reihenfolge des Bauens handhaben sollte. Es ist keine manuelle Handhabung erforderlich und sollte auch nicht durchgeführt werden.

    – khmarbaise

    18. April 2015 um 12:34 Uhr

  • Ein mögliches Duplikat von Maven erkennt keine Geschwistermodule, wenn mvndependency:tree ausgeführt wird

    – Schubert

    5. Mai 2017 um 15:18 Uhr

Benutzer-Avatar
Andrew McKee

Bist du gelaufen mvn clean install mindestens einmal im Projekt, um die Abhängigkeiten in Ihrem lokalen Repository zu installieren?

  • Das hat funktioniert. Das bedeutet, dass ich install jedes Mal ausführen muss, wenn ich das abhängige Modul aktualisiere, richtig? Ich nahm an, dass es eine Möglichkeit gibt, die zuletzt erstellte Kopie zu verwenden (dh root/B/target/B-0.1-SNAPSHOT.jar)

    – Benjamin George Roberts

    19. April 2015 um 3:01 Uhr

  • Ich denke, wonach Sie suchen, ist: stackoverflow.com/questions/4367665/… Die meisten Methoden dazu sind jedoch weniger gut dokumentiert, da Maven auf dem Abhängigkeitsmodell beruht, bei dem Ihre Abhängigkeiten im lokalen Repository installiert werden

    – Andrew McKee

    19. April 2015 um 10:03 Uhr


  • Ich kann mvn-Pakete erstellen und die Pakete gegeneinander erstellen lassen, aber ich bin davon ausgegangen, dass andere Aktionen (wie das Generieren des Klassenpfads oder das Ausführen) auch die zuletzt erstellten Pakete verwenden würden, nicht das, was ich zuletzt in meinem lokalen Repository installiert habe. Ich vermute, das ist nur ein Kompromiss, mit dem ich leben muss?

    – Benjamin George Roberts

    19. April 2015 um 10:11 Uhr

  • Für mich ist es lächerlich, dass maven im lokalen Repository nach Submodulen suchen müsste! Ernsthaft? Was für ein Hack.

    – Tschad

    31. August 2017 um 20:31 Uhr

  • Traurig zu sehen, ob ich es im lokalen Repo installieren muss Abhängigkeit: Baum! Mein Modul befindet sich noch in der Entwicklung, die Installation im lokalen Repo kann zu Problemen führen.

    – Albert Zhong

    13. Oktober 2017 um 9:11 Uhr

Benutzer-Avatar
tkruse

Der Maven-Reaktor ist auf diese Weise seltsam, er hält Module nur für bestimmte Aufgaben bereit. Wenn Sie ein Build-Target ausführen, das nur etwas für ein Unterprojekt tut, dann selbst wenn Maven zuerst Abhängigkeiten aufbaut, behält es diese (manchmal) nicht im Reaktor.

Die Installation im lokalen Repository ist eine Problemumgehung, aber es ist schrecklich und sollte nach Möglichkeit vermieden werden, da Sie leicht mit veralteten Build-Ergebnissen enden können.

Eine etwas weniger hässliche Problemumgehung besteht darin, zwei Build-Targets zu kombinieren, wobei das zweite Build-Target etwas Harmloses tut, aber das Hinzufügen zum Reaktor in allen Teilprojekten auslöst.

Beispielsweise können Sie die gewünschte Aufgabe mit den Aufgaben „Kompilieren“ oder „Paketieren“ kombinieren.

Siehe auch Antwort mit der höchsten Bewertung bei Maven erkennt keine Geschwistermodule, wenn mvndependency:tree ausgeführt wird

Dieser Fehler kann auch dadurch verursacht werden, dass sich Maven im Offline-Modus befindet.

Manchmal scheine ich versehentlich den Offline-Modus in IntelliJ IDEA zu aktivieren. Um es zu deaktivieren, schalten Sie um Toggle Offline Mode in der Maven Toolbar umschalten

Geben Sie hier die Bildbeschreibung ein

oder deaktivieren Sie die Offline arbeiten Kontrollkästchen in den Einstellungen unter Build, Execution, Deployment > Build Tools > Maven.

Geben Sie hier die Bildbeschreibung ein

Konfigurieren Testglas in dem jar-Plugin hat das Problem für mich gelöst:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.2.0</version>
        <executions>
          <execution>
            <goals>
              <goal>test-jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

Danach Laufen mvn clean install funktioniert.

1228330cookie-checkMaven kann die Abhängigkeit für das Modul in demselben Projekt mit mehreren Modulen nicht auflösen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy