Project BをProject Aによってビルドされ、リモートリポジトリにデプロイされるZipをプルダウン(およびアンパック)しようとしています。
Zipは、パッケージタイプpom
を使用して、_maven-Assembly-plugin
_を使用して作成および添付されます。
_<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>
_
_maven-dependency-plugin
_でProject Bのpomからプルダウンしようとしています:
_<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>
_
失敗します:[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]
これは、プロジェクトAのパッケージングをpom
ではなくZip
として指定したためと思われますが、プロジェクトAを指定することはできません=包装タイプZip
として:結果として:
_[ERROR] Unknown packaging: Zip @ line 13, column 13
_
ここで何か間違ったことをしていますか、これは単に不可能ですか?アーティファクトにまとめたいファイルがたくさんあるだけで、他の複数のプロジェクトでそれらをダウンロードして解凍して使用することができます。さまざまな提案を受け付けています...
また、組み立てられたZipが実際にネクサスにあることを確認しました。
回答付きで更新
他の人の利益のために、私が欠けていたのは、依存関係の_<classifier>
_がアセンブリの_<id>
_と一致しなければならないことです。以下のファイルでthisistheattachedartifactsclassifier
が指定されていることに注意してください。
scripts.xml(プロジェクトA):
_<Assembly>
<id>thisistheattachedartifactsclassifier</id>
<formats>
<format>Zip</format>
</formats>
<fileSets>
<fileSet>
<directory>src/main/resources</directory>
...
</fileSet>
</fileSets>
</Assembly>
_
pom.xml(プロジェクト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>
_
Stack Overflowへようこそ:)。
あなたは正しい道を進んでいます。あなたの本当の問題はZipを使用していることです。
次の設定は大丈夫で、私には最適です。それは古いもの(2年前)であり、ベストプラクティスと一致するかどうかはわかりません。しかし、私はそれが働いていることを知っています。
これにより、特にユニットテストの場合、プロジェクト間でリソースを共有できます。
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>
アセンブリ記述子:このアーティファクトが生成されます:cfg_dev-1.1.0-resources.Zip
「分類子」はリソースです(アセンブリ名など)
リソースZip false src/main/resources
pom.xml
その点に注意してください
依存関係「分類子」はリソースです(以前のアセンブリ名と同様)
<!-- 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>
これが明確であり、それがあなたを助けることを願っています:)
別の方法としては、完全にzip圧縮をあきらめ、標準のMavenライフサイクルを使用してファイルをjarファイルのリソースとしてパックし、クラスパスを介して他のプロジェクトからファイルにアクセスします。
特定の梱包要件(含めたり、除外したりするなど)がない限り、追加の構成は必要ありません。プロジェクトのsrc/main/resources
ディレクトリ。
このアプローチには、EclipseなどのIDE内から呼び出された場合に変更なしで動作するという追加の利点があります。
コマンドラインからこのようなことをしたい場合(例えば、pom.xml
ファイルを書かずにスクリプトから)、ここにそれを行う方法があります...
個々のプロパティを指定できます:
mvn dependency:copy -DgroupId=org.Apache.maven -DartifactId=maven-core -Dversion=2.2.1 -Dpackaging=Zip -Dclassifier=thisistheattachedartifactsclassifier
または、1つのartifact
パラメーターですべてを指定します。
mvn dependency:copy -Dartifact=org.Apache.maven:maven-core:2.2.1:Zip:thisistheattachedartifactsclassifier
後者では、packaging/type
属性の後の最後にclassifier
を保持することが重要です。このような:-Dartifact=groupId:artifactId:version:type:classifier
必要に応じて、-DoutputDirectory=<directory>
パラメーターを使用してターゲットディレクトリをオプションで指定することもできます。