Frage

gegoogelt ich dies und es scheint, dass niemand eine Antwort hat, doch es scheint, als ob eine solche elementare Sache, dass es möglich sein sollte.

Ich habe die folgende Projektstruktur:

parent
   ---sub-project1
   ---sub-project2

Unter project2 Bedürfnisse Unter project1 als Abhängigkeit haben.

Also ich habe dies in Unter project2 pom:

 <dependencies>
    <dependency>
         <artifactId>sub-project1</artifactId>
        <groupId>mygroup</groupId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

....

Wenn ich das tue, Maven versucht, die Unter project1.jar Datei dowload, die es nicht gibt, weil es noch für den Repo nicht bereit ist.

Ich habe versucht, eine <scope>import</scope> in die Abhängigkeit zu bringen, aber das hat nicht funktioniert entweder -. Elbe Ergebnis

Also, was muss ich tun Maven an Unter project1 zu sehen bekommen, wenn Unter project2 Gebäude?

Bearbeiten Hier sind einige pom Schnipsel:

Parent:

<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>
   <prerequisites>
      <maven>2.0.9</maven>
   </prerequisites>
   <modules>
    <module>sub-project1</module>
    <module>sub-project2</module>
   </modules>
 ....

Unter project1:

<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">
  <parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>sub-project1</artifactId>
....

Unter project2:

<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">
  <parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

   <artifactId>sub-project1</artifactId>

    <dependencies>
     ....
       <dependency>
          <artifactId>sub-project2</artifactId>
          <groupId>mygroup</groupId>
          <version>1.0-SNAPSHOT</version>
          <scope>import</scope>
      </dependency>
  </dependencies>

Der Fehler, den ich immer bin, wenn ich mvn clean install auf dem übergeordneten bekam ist:

[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure

Mit vielen Klassen / Paket Fehler nicht gefunden

War es hilfreich?

Lösung

Sie sollten einen Master pom auf Eltern Ebene haben, in dem Sie die Module des Projekts auflistet.

  <modules>
    <module>sub-project1</module>
    <module>sub-project2</module>>
  </modules>

In jedem Teilprojekt haben Sie Ihre Eltern verweisen:

<parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

Und Sie die Abhängigkeiten zwischen dem Projekt angeben, wie Sie getan haben. Ich glaube, Sie haben einige der Schritte verpasst ich beschrieben habe.

Edit: Sie sollten Ihre MVN sauber installieren auf der übergeordneten Ebene Ausgabe

.

Andere Tipps

  

Wenn ich das tue, Maven versucht, die Unter project1.jar Datei dowload, die es nicht gibt, weil es noch für den Repo nicht bereit ist.

Das ist das normale Verhalten, Maven lösen Abhängigkeiten durch das lokale Repository, so dass Sie install Unter project1 müssen zuerst. Eigentlich ist der gemeinsame Weg mit einem solchen Situation umzugehen ist, einen Reaktor zu bauen (eine Multi-Module bauen) von der Mutter zu starten.

Angenommen, Sie Module in der übergeordneten werden aggregiert das heißt Sie so etwas wie dies in der „Eltern“ pom.xml erklärt haben:

<modules>
  <module>sub-project1</module>
  <module>sub-project2</module>>
</modules>

Just cd in das übergeordnete Verzeichnis und starten Sie einen Reaktor zu bauen:

$ cd parent
$ mvn install

Maven wird dann berechnen Sie die Build-Reihenfolge (aus dem orientierten Graphen abgezogen aus Modulen und deren Abhängigkeiten) und führen install auf alle Module in der berechneten Reihenfolge (Mutter zuerst , dann Unter project1 und schließlich Unter project2 für Ihr spezielles Beispiel).

Aber nicht verwenden einen Umfang vom Typ import, werden Sie es hier zu mißbrauchen. Entfernen Sie es.

Update: Die Frage wurde aktualisiert, während ich zu beantworten und die POMs gezeigt wird, sind nicht die Situation, in der ursprünglichen Frage (umgekehrte Abhängigkeit, wahrscheinlich Fehler in der Artefakt-ID) gegeben illustrieren. Aber der vorgeschlagene Ansatz gilt nach wie vor. Entfernen Sie die <scope>import</scope> auf die Abhängigkeit und starten Sie einen Reaktor zu bauen von der Mutter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top