2016-07-18 16 views
1

Ich bin neu zu Maven. (Ich habe stundenlang nach der Antwort gesucht, aber ohne Glück. mvn Abhängigkeit: Kopie-Abhängigkeiten lösen mein Problem nicht) Ich muss alle Abhängigkeiten eines Projekts (in Form von Gläsern) kopieren und wenn einer von meine Gläser hängen von einem anderen Artefakt als auchmaven - Kopieren Sie alle Abhängigkeiten eines Projekts und transitive Abhängigkeiten

Beispiel project1 pom.xml, dass Artefakt kopieren:

<?xml version="1.0"?> 
<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"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>project1</groupId> 
    <artifactId> project1.utils</artifactId> 
    <version>1.0</version> 
    <name> project1. utils </name> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>project2</groupId> 
      <artifactId>project2.artifact</artifactId> 
      <version>2.0</version> 
     </dependency> 
    </dependencies> 

<build> 
<plugins> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <archive> 
         <index>true</index> 
         <manifestEntries> 
          <Build-Number>${buildNumber}</Build-Number> 
          <Revision>${Revision}</Revision> 
         </manifestEntries> 
        </archive> 
       </configuration> 
      </plugin> 
</plugins> 

</build> 
</project> 

„project1“ hat eine Abhängigkeit von project2.artifact.jar Wenn ich „mvn Abhängigkeit verwenden: Kopier- Abhängigkeiten "Ich bekomme project2.artifact.jar , aber ich bekomme nicht project3.artifact.jar, dass ich s eine Abhängigkeit von "project2".

 Ich habe nicht die Pom von Projekt2, aber es ist in meinem lokalen Repository installiert.

Wie bekomme ich alle Abhängigkeiten von Projekt 1 einschließlich der zweiten Jar ("project3.artifact.jar")?

pom von project2 etwas würde wie folgt aussehen: aber ich es nicht haben, wenn ich an einen Kunden gehen, so dass ich project2.artifact.jar installieren, project3.artifact.jar manuell mit „mvn install“

Projekt2 pom.xml:

<?xml version="1.0"?> 
<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"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>project2</groupId> 
    <artifactId>project2.artifact</artifactId> 
    <version>2.0</version> 
    <name>project2.artifact</name> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>project3</groupId> 
      <artifactId>project3.artifact</artifactId> 
      <version>3.0</version> 
     </dependency> 
    </dependencies> 

<build> 
<plugins> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <archive> 
         <index>true</index> 
         <manifestEntries> 
          <Build-Number>${buildNumber}</Build-Number> 
          <Revision>${Revision}</Revision> 
         </manifestEntries> 
        </archive> 
       </configuration> 
      </plugin> 
</plugins> 

</build> 
</project> 

Vielen dank in

erweiterte
+0

Können Sie Projekt2 POM posten? – Tunaki

+0

Zu welchem ​​Zweck müssen Sie die JAR-Dateien kopieren? Möchten Sie die App ausführen? – khmarbaise

+0

Tunaki - ich habe die Frage bearbeitet und die Pom von Project2 hinzugefügt, obwohl ich sie nicht habe, wenn ich bei einem Kunden bin. khmarbaise - Ich brauche die Kopie, damit ein Client den Code von Projekt1 kompiliert und project1.utils.jar ausführt (ich installiere auf seinem Computer project1.artifact.jar, project2.artifact.jar mit mvn install vor). – Mishta

Antwort

1

Bitte geben Sie die neueste Version der Abhängigkeit Plugin verwenden:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:copy-dependencies 

Wenn nicht funktioniert überprüfen Sie bitte:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:tree 
mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:list 

copy-dependency Ziel kopiert die gleichen Artefakte, die durch tree und list Ziele aufgelöst und angezeigt wird.

Zur Prüfung bereite ich project3 pom.xml:

<?xml version="1.0"?> 
<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"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>project3</groupId> 
    <artifactId>project3.artifact</artifactId> 
    <version>3.0</version> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
</project> 

ich solche Verzeichnisstruktur haben:

pr1 
    pom.xml - from question 

pr2 
    pom.xml - from question 

pr3 
    pom.xml - as shown above 

Jetzt mache ich:

cd pr3 
mvn clean innstall 

cd ../pr2 
mvn clean innstall 
mvn dependency:tree 

dependency:tree Ausgabe:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ project2.artifact --- 
[INFO] project2:project2.artifact:jar:2.0 
[INFO] \- project3:project3.artifact:jar:3.0:compile 

So hängt project2 auf project3 nächste:

cd ../pr1 
mvn clean install 
mvn dependency:tree 

dependency:tree in project1 Ausgabe:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ project1.utils --- 
[INFO] project1:project1.utils:jar:1.0 
[INFO] \- project2:project2.artifact:jar:2.0:compile 
[INFO] \- project3:project3.artifact:jar:3.0:compile 

So ist es auch in Ordnung ist.

Und jetzt kopieren:

mvn dependency:copy-dependencies 

mit:

[INFO] --- maven-dependency-plugin:2.8:copy-dependencies (default-cli) @ project1.utils --- 
[INFO] Copying project3.artifact-3.0.jar to ...\pr1\target\dependency\project3.artifact-3.0.jar 
[INFO] Copying project2.artifact-2.0.jar to ...\pr1\target\dependency\project2.artifact-2.0.jar 

Wenn Sie auch project1 Artefakt fügen Sie die Abhängigkeit in project1 pom.xml

... 
<dependencies> 
    <dependency> 
     <groupId>project2</groupId> 
     <artifactId>project2.artifact</artifactId> 
     <version>2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>project1</groupId> 
     <artifactId>project1.utils</artifactId> 
     <version>1.0</version> 
    </dependency> 
</dependencies> 
... 

Jetzt kopieren möchten :

mvn clean dependency:copy-dependencies wir haben:

[INFO] --- maven-dependency-plugin:2.8:copy-dependencies (default-cli) @ project1.utils --- 
[INFO] Copying project3.artifact-3.0.jar to ...\pr1\target\dependency\project3.artifact-3.0.jar 
[INFO] Copying project2.artifact-2.0.jar to ...\pr1\target\dependency\project2.artifact-2.0.jar 
[INFO] Copying project1.utils-1.0.jar to ...\pr1\target\dependency\project1.utils-1.0.jar 
+0

leider ist auch bei Version 2.10 das Ergebnis gleich (und es erscheint nicht in Baum, Liste). – Mishta

+0

Slawomir Jaranowski - vielen Dank für Ihre Zeit! aber was ich brauche, ist das: ich möchte project3.artifact-3.0.jar, project2.artifact-2.0.jar (kopieren Sie in lokalen Repo), dann nur project1 mit einer Abhängigkeit von project2 (aber ohne den Code von Projekt 2 und 3). jetzt, wie bekomme ich die Abhängigkeiten von Projekt1 (die installierten Gläser)? (Entschuldigung, wenn meine Beschreibung am Anfang nicht klar war) – Mishta

+0

@Mishta, wenn Sie keine Projektquelle haben, können Sie einfache Pom vorbereiten, was Sie bereits in dieser Frage getan haben und poms für diese Artefakte installieren. –

Verwandte Themen