Frage

Ich versuche, ein Multi-Modul Maven Projekt einzurichten und die Zwischenmodulabhängigkeiten werden offenbar nicht richtig eingerichtet werden.

ich habe:

<modules>
  <module>commons</module>
  <module>storage</module>
</modules>

in der Mutter POM (die eine Verpackung vom Typ POM hat) und dann Unterverzeichnisse commons/ und storage/ die JAR poms mit dem gleichen Namen definiert werden.

Speicher hängt von Commons.

Im Haupt (Master) Verzeichnis, betreibe ich mvn dependency:tree und sehen:

[INFO] Building system
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] domain:system:pom:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:3.8.1:test
[INFO] ------------------------------------------------------------------------
[INFO] Building commons
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
...correct tree...
[INFO] ------------------------------------------------------------------------
[INFO] Building storage
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
Downloading: http://my.repo/artifactory/repo/domain/commons/1.0-SNAPSHOT/commons-1.0-SNAPSHOT.jar
[INFO] Unable to find resource 'domain:commons:jar:1.0-SNAPSHOT' in repository my.repo (http://my.repo/artifactory/repo)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

Missing:
----------
1) domain:commons:jar:1.0-SNAPSHOT

Warum wird die Abhängigkeit von „commons“ nicht bestanden, auch wenn der Reaktor es offensichtlich gesehen hat, weil sie die Abhängigkeit Baum erfolgreich verarbeitet? Es sollte auf jeden Fall nicht zum Netz gehen werden, um es zu finden, da es direkt, es gibt ...

Die pom für die Lagerung:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <packaging>jar</packaging>
  <parent>
    <artifactId>system</artifactId>
    <groupId>domain</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <groupId>domain</groupId>
  <artifactId>storage</artifactId>
  <name>storage</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <!-- module dependencies -->
    <dependency>
      <groupId>domain</groupId>
      <artifactId>commons</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

    <!-- other dependencies -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Vielen Dank für Ihre Anregungen!

(Edit)

Um zu klären, was ich hier bin auf der Suche ist: Ich will nicht haben Modul X zu installieren Modul Y zu bauen, die auf X abhängt, da beide Module aus dem gleichen übergeordneten POM verwiesen. Dies macht intuitiv Sinn für mich, wenn ich zwei Dinge in dem gleichen Quellbaum habe, soll ich nicht Zwischenprodukte installieren muß, um den Build fortzusetzen. Hoffentlich mein Denken macht einen Sinn hier ...

War es hilfreich?

Lösung

Ich denke, das Problem ist, dass, wenn Sie eine Abhängigkeit angeben Maven es als Glas haben erwartet (oder was auch immer) verpackt ist und von mindestens einem lokalen Repo. Ich bin sicher, dass, wenn Sie mvn install auf commons Projekt zunächst alles laufen wird funktionieren.

Andere Tipps

Wie in diesem Maven Mailingliste Thread diskutiert die Abhängigkeit: Baum Ziel selbst werden die Dinge sehen im Repository, anstatt den Reaktor. Sie können von mvn Installation dieses Problem umgehen, wie zuvor vorgeschlagen, oder etwas weniger beschwerlich zu tun, die den Reaktor, wie

rufen
mvn compile dependency:tree

Funktioniert für mich.

Aus dieser Erkenntnis heraus ist ein älterer Thread, aber es scheint, dass entweder das Werkzeug entwickelt oder könnte dies beim ersten Mal verpasst haben.

Es ist möglich, einen Build ausführen, die Abhängigkeiten, ohne die Installation, indem Sie einen Reaktor zu bauen gelöst macht.

Wenn Sie Ihren Build in der übergeordneten beginnen, die die Modulstruktur des Projekts beschreibt dann Abhängigkeiten zwischen Modulen wird während des Build sich über den internen Maven Reaktor aufgelöst werden.

Natürlich ist dies nicht die perfekte Lösung, da es nicht den Build eines einzelnen Moduls innerhalb der Struktur löst. In diesem Fall Maven nicht die Abhängigkeiten in seinem Reaktor hat und Biene sucht es im Repository zu lösen. Also für einzelne baut haben Sie immer noch zuerst die Abhängigkeiten installieren.

Hier finden Sie einige Referenz diese Situation zu beschreiben.

für mich, was auf diesen Thread führte ich war ein ähnliches Problem und die Lösung war, alle Modulabhängigkeits Poms hatte, um sicherzustellen,

 <packaging>pom</packaging>

Die Eltern hatten

pom

mein Modell dep hatte pom - so gibt es kein Glas gefunden werden

.

Das einzige, was für mich workd: Umschalten auf Gradle: (

Ich habe

Parent
  +---dep1
  +---war1 (using dep1)

und ich kann nur cd in WAR1 und verwenden mvn tomcat7: run-Krieg. Ich muß immer vor, das gesamte Projekt installieren, trotz WAR1 seine Eltern verweist und die übergeordneten Referenzen WAR1 und dep1 (als Module), so sollten alle Abhängigkeiten bekannt sein.

Ich verstehe nicht, was das Problem ist.

In einer Maven Modulstruktur wie folgt aus:

- parent
  - child1
  - child2

Sie werden in der parent pom haben diese:

<modules>
  <module>child1</module>
  <module>child2</module>
</modules>

Wenn Sie hängen jetzt von child1 in child2 durch die folgenden in Ihrem <dependencies> in child2 setzen:

<dependency>
  <groupId>example</groupId>
  <artifactId>child1</artifactId>
</dependency>

In Kürze erhalten Sie eine Fehlermeldung erhalten, dass die JAR für child1 nicht gefunden werden kann. Dies kann durch die Deklaration eines <dependencyManagement> Blockes einschließlich child1 im pom für parent gelöst werden:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>example</groupId>
      <artifactId>child1</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</dependencyManagement>

child1 wird nun gebaut werden, wenn Sie ein compile oder package usw. Ziel auf parent laufen und child2 wird child1 die kompilierten Dateien finden.

beantworten von Don Willis :

Wenn Ihr Build erstellte Test-Gläser Testcode unter Ihrem Reaktor Submodule teilen sollten Sie verwenden:

mvn test-compile dependency:tree

die dependency:tree erlauben bis zur Fertigstellung in diesem Fall ausgeführt werden.

Stellen Sie sicher, dass das Modul, das in der pom aufgelöst wird versagt, zeigt auf die rechts Eltern durch die Konfigurationen in der pom-Datei des Moduls einschließlich.

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