2016-06-18 3 views
0

Hier ist, was ich zu tun versucht:Einbeziehung von transitiver Abhängigkeit Gläsern mit copy-Abhängigkeiten

  1. ich ein Dienstprogramm Projekt, die gemeinsame Klasse usw. enthält, und ich brauche zu verweisen, dass jar in 2 meines weitere Projekte. Nehmen wir an, die gemeinsame jar ist common.jar, und das andere Projekt, in dem ich es verwende, ist service1. Ich definiere einen lokalen Repo-Ordner in service1, schließe den common.jar dort ein und definiere ihn als eine Abhängigkeit in 's pom.xml.
  2. Kompilierzeit funktioniert gut, ich bin auch in der Lage, dies aus Eclipse auszuführen.
  3. Jetzt möchte ich eine service1.jar generieren und alle seine Abhängigkeiten zu den lib Ordner kopiert haben, so dass ich es einfach als java -jar service.jar laufen können und die lib Ordner im Classpath enthalten. Ich kann dies mit dem copy-dependencies Plugin tun.

    jedoch dieses Plugin nur kopiert die direkten Abhängigkeiten von service1 und kopiert nicht den jar s, die in dem pom.xml von common Projekt erwähnt werden.

Allerdings muss ich für erfolgreich laufen service1 diejenigen common Projekts Abhängigkeit jar s zur Laufzeit benötigen.

Wie kann ich diese common Projekt der Abhängigkeit jar s zum letzten lib Ordnern service1 kopiert?

Vielen Dank im Voraus.

Antwort

0

Re: „Ich definiere einen lokalen Repo-Ordner in service1“ - Es nur einem lokalen Repository-Ordner in Verbindung mit Maven sein sollte, und es ist bei ~/.m2/repository standardmäßig. Siehe Maven/Introduction to Repositories und Maven/Settings Reference.

Dieses Repository fungiert als "lib" -Ordner (zur Kompilierzeit) und, wenn es in den POM (s) richtig deklariert ist, kümmert sich Maven automatisch um direkte und transitive Abhängigkeiten von Ihrem Projekt. Siehe Maven/Introduction to the Dependency Mechanism.

Daher müssen Abhängigkeiten normalerweise nicht selbst kopiert werden.

Also, die beste wäre, Ihr Dienstprogramm Projekt zu einem Maven-Projekt zu konvertieren und dort eine mvn install durchzuführen. Ein solches Artefakt wird - zusammen mit den Artefakten, von denen es abhängt - in das lokale Maven-Repository gestellt und kann von dort als Abhängigkeit durch die 2 Ihrer anderen Projekte referenziert werden.

Wenn dies nicht möglich ist, können Sie das Dienstprogramm jar auf das lokale Repository setzen mit dem install-file Ziel der Apache Maven Install Plugin:

  • install:install-file meist verwendet, um einen extern erstellte Artefakt in das lokale Repository zu installieren, zusammen mit seinem POM.In diesem Fall kann die Projektinformation aus einer optional angegebenen pomFile-Datei entnommen werden, kann aber auch über Kommandozeilenparameter angegeben werden.
+0

Hallo Gerold - Danke für die Antwort. Ich gehe jedoch aus zwei Gründen nicht mit diesem Ansatz vor: 1 – user1790625