Ich versuche, Project B eine Zip-Datei, die von Project A erstellt und in einem Remote-Repository bereitgestellt wurde, herunterzuziehen (und zu entpacken).
Die Postleitzahl wird mit dem maven-Assembly-plugin
Mit dem Verpackungstyp pom
erstellt und angehängt:
<artifactId>project-a</artifactId>
<name>Zip</name>
<description>Used by Project B</description>
<packaging>pom</packaging>
...
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-Assembly-plugin</artifactId>
<executions>
<execution>
<id>distribution-package</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/Assembly/scripts.xml</descriptor>
</descriptors>
<tarLongFileMode>gnu</tarLongFileMode>
</configuration>
</execution>
</executions>
</plugin>
Versuch, es mit dem maven-dependency-plugin
Von Project B herunterzuziehen:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-scripts</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/staging</outputDirectory>
<stripVersion>true</stripVersion>
<artifactItems>
<artifactItem>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<overWrite>true</overWrite>
<type>Zip</type>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
schlägt fehl mit: [ERROR] Failed to execute goal on project ...: Could not resolve dependencies for project group:artifact:pom:version: Could not find artifact group:project-a:Zip:version in nexus (http://...:8081/nexus/content/groups/public) -> [Help 1]
Ich würde annehmen, dass dies daran liegt, dass ich Project A 's Verpackung als pom
und nicht Zip
angegeben habe, aber ich kann nicht Project A angeben als Verpackungsart Zip
, weil es ergibt:
[ERROR] Unknown packaging: Zip @ line 13, column 13
Mache ich hier etwas falsch oder geht das einfach nicht? Ich habe nur eine Reihe von Dateien, die ich zu einem Artefakt bündeln möchte, und erlaube mehreren anderen Projekten, diese herunterzuladen und zur Verwendung zu entpacken. Offen für verschiedene Vorschläge ...
Ich habe auch geprüft, ob die zusammengebaute Zip tatsächlich im Nexus ist.
AKTUALISIERT MIT ANTWORT
Zum Vorteil aller anderen fehlte mir, dass der <classifier>
Der Abhängigkeit mit dem <id>
Der Assembly übereinstimmen muss. Beachten Sie, dass in den folgenden Dateien thisistheattachedartifactsclassifier
angegeben ist.
scripts.xml (Projekt A):
<Assembly>
<id>thisistheattachedartifactsclassifier</id>
<formats>
<format>Zip</format>
</formats>
<fileSets>
<fileSet>
<directory>src/main/resources</directory>
...
</fileSet>
</fileSets>
</Assembly>
pom.xml (Projekt B):
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-scripts</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/staging</outputDirectory>
<stripVersion>true</stripVersion>
<artifactItems>
<artifactItem>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<classifier>thisistheattachedartifactsclassifier</classifier>
<overWrite>true</overWrite>
<type>Zip</type>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
Willkommen bei Stack Overflow :).
Sie sind auf dem richtigen Weg. Ihr echtes Problem ist die Verwendung einer Zip.
Die folgende Konfiguration ist in Ordnung und funktioniert hervorragend für mich. Es ist eine alte (vor 2 Jahren), und ich bin nicht sicher, ob sie den Best Practices entspricht. Aber ich weiß, dass das funktioniert.
Auf diese Weise kann ich einige Ressourcen auf Projekte verteilen, insbesondere für Komponententests.
pom.xml
<groupId>com.mycompany</groupId>
<artifactId>cfg_dev</artifactId>
<version>1.1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-Assembly-plugin</artifactId>
<executions>
<execution>
<id>cfg-main-resources</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
<configuration>
<descriptors>
<descriptor>/src/main/Assembly/resources.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Assembly-Deskriptor: Dieses Artefakt wird erzeugt: cfg_dev-1.1.0-resources.Zip Bitte beachten Sie, dass
der "Klassifizierer" ist Ressourcen (wie Assembly Name)
resources Zip false src/main/resources
pom.xml
Bitte beachte, dass
die Abhängigkeit "Klassifikator" ist Ressourcen (wie zuvor Assembly Name)
<!-- Unit test dependency -->
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>cfg_dev</artifactId>
<version>${project.version}</version>
<classifier>resources</classifier>
<type>Zip</type>
<scope>test</scope>
</dependency>
....
<build>
<testResources>
<!-- Ressources habituelles -->
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
<!-- Unzipped resources from cfg_dev -->
<testResource>
<directory>${project.build.directory}/test-resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
<plugins>
<!-- Unzip shared resources -->
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-cfg-test-resources</id>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<phase>generate-test-resources</phase>
<configuration>
<outputDirectory>${project.build.directory}/test-resources</outputDirectory>
<includeArtifactIds>cfg_dev</includeArtifactIds>
<includeGroupIds>${project.groupId}</includeGroupIds>
<excludeTransitive>true</excludeTransitive>
<excludeTypes>pom</excludeTypes>
<scope>test</scope>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
Ich hoffe das ist klar und das wird dir helfen :)
Ein alternativer Ansatz könnte darin bestehen, das Zippen ganz aufzugeben, den Maven-Standardlebenszyklus zu verwenden, um Ihre Dateien als Ressourcen in eine JAR-Datei zu packen und von Ihren anderen Projekten aus über den Klassenpfad darauf zuzugreifen.
Sofern Sie keine speziellen Anforderungen an das Packen (einschließlich, ausschließlich usw.) haben, ist hierfür keine zusätzliche Konfiguration erforderlich. Legen Sie Ihre Daten einfach im Verzeichnis src/main/resources
Ihres Projekts ab.
Dieser Ansatz hat den zusätzlichen Vorteil, dass er beim Aufrufen aus einem IDE wie Eclipse heraus unverändert funktioniert.
Wenn Sie jemals so etwas über die Befehlszeile ausführen möchten (z. B. über ein Skript, ohne eine pom.xml
- Datei schreiben zu müssen), gehen Sie wie folgt vor ...
Sie können entweder die einzelnen Eigenschaften angeben:
mvn dependency:copy -DgroupId=org.Apache.maven -DartifactId=maven-core -Dversion=2.2.1 -Dpackaging=Zip -Dclassifier=thisistheattachedartifactsclassifier
Oder geben Sie sie alle in einem artifact
Parameter an:
mvn dependency:copy -Dartifact=org.Apache.maven:maven-core:2.2.1:Zip:thisistheattachedartifactsclassifier
Bei letzterem ist es wichtig, das classifier
am Ende nach dem Attribut packaging/type
Zu belassen. Wie folgt: -Dartifact=groupId:artifactId:version:type:classifier
Optional können Sie das Zielverzeichnis auch mit dem Parameter -DoutputDirectory=<directory>
Angeben.