2016-05-26 16 views
1

Ich habe ein Maven-Projekt, das ich mit einigen meiner anderen Projekte teilen möchte. Es hat einige benutzerdefinierte Code und dann ein paar Abhängigkeiten auf Dinge wie log4j, jasypt, etc.Maven - auf lokalen Repo installiert, keine transitiven Abhängigkeiten erhalten

Ich baue es und installieren Sie es in meinem lokalen Maven Repo. Ich kann sehen, dass es dort erfolgreich platziert wurde. Mit Blick auf .m2/repository/derp/Foo/1.0 hat es ein .pom mit all seinen Abhängigkeiten definiert.

Ich kann es auch als eine Abhängigkeit in meinen Projekten auf höherer Ebene definieren, und es kompiliert.

<dependency> 
     <groupId>my.group</groupId> 
     <artifactId>Foo</artifactId> 
     <version>1.0</version> 
    </dependency> 

kann ich das Glas in meiner 'Maven Abhängigkeiten' in Finsternis sehen, und das Gefäß erweitert ich sehe es die richtige pom mit Abhängigkeiten in META-INF/Maven/derp/Foo/pom.xml hat.

Aber mein Top-Level-Projekt über Foo bekommt nicht die Abhängigkeiten, die Foo braucht. Ich bekomme Laufzeitausnahmen, und ich kann keine der transitiven Abhängigkeitsgläser in meinen Abhängigkeiten in Eclipse sehen.

Was muss ich tun, um sicherzustellen, dass Maven das Pom for Foo in meinem lokalen Repository sieht, damit es alle transitiven Abhängigkeiten erhält, die es benötigt?

----- ----- bearbeiten

Antwort unten zu äußern, werden sie wie folgt definiert, mit der Abhängigkeiten Tag auf der obersten Ebene im Rahmen des Projekts Tag.

<dependencies> 

    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>2.2</version> 
    </dependency> 

etc ...

Dies sind die Gläser, die richtig maven findet, wenn ich gerade bin den Aufbau und dieses Foo Projekt ausgeführt wird, aber Maven nicht enthalten diese Gläser, wenn ein Projekt auf Foo abhängt, (Bar), und ich finde es heraus, wenn ich versuche, Bar zu führen.

+0

können Sie teilen, wie Abhängigkeiten in Foo pom definiert sind? Sind sie in einer Abhängigkeitsverwaltung? im Bereich Abhängigkeiten, in welchem ​​Bereich sind sie? –

+0

Enthalten in meinem Beitrag bearbeiten, um Ihren Kommentar zu beantworten. Meine Lösung für jetzt ist, ein "schattiertes" Foo-Glas zu machen, das alle Gläser enthält, die nicht in das Projekt über Foo aufgenommen werden. – medloh

Antwort

1

Was bedeutet "Top-Level-Projekt über Foo ist nicht die Abhängigkeiten" bedeuten?

Alles "über" Foo im Bau Reaktor sollte direkt von Foo abhängen, wie Sie gesagt haben. Das <dependency/> spezifizierte wird resolve toFoo 's Abhängigkeiten (innerhalb des Bereichs, der Foo spezifiziert).

Ohne die Einzelheiten Ihres Projekts zu verstehen, ist es unwahrscheinlich, dass wir Ihnen weiterhelfen können.

Einige mögliche gemeinsame Situationen:

  1. Sie erwarten zu können, um den Zugang zu test scoped Abhängigkeiten in einigen nicht-test Phase der Ausführung zu erhalten. Einfach nicht wahr.
  2. Sie erwarten, dass das Angeben einer Abhängigkeit von einem Artefakt die Laufzeit automatisch diese Abhängigkeiten für Sie lädt. Das stimmt auch nicht.
    Sie möchten das Ziel exec:java über die maven exec plugin aufrufen und geben Sie Ihren gewünschten Auflösungsbereich innerhalb der <configuration/>, möglicherweise auch für diese <execution/>.
  3. Sie haben <dependencyManagement> für <dependencies> verwechselt. Dies geschieht viel mehr, als ich erwartet hätte.
+0

Ich denke, # 3 könnte mein Problem sein. Gehen Sie jetzt zu RTFM ... http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management – medloh

Verwandte Themen