Mavenアセンブリプラグインを使用して依存関係のあるjarを構築しようとしています例外スコープを提供しているもの。
Jar-with-dependenciesをAssembly.xmlファイルにコピーし、pomでの使用を構成しました。ここに参照用です:
<?xml version="1.0" encoding="UTF-8"?>
<Assembly>
<id>injectable-jar</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
</fileSet>
</fileSets>
</Assembly>
スコープをprovided
に設定すると、私が欲しいものを正確に含むjarを作成できることがわかりましたしない欲しいのですが、取得方法がわかりませんその逆の振る舞い。
これは少し不格好ですが、maven-dependency-pluginを使用してすべての依存関係をプロジェクトにコピー/アンパックしてから、Assemblyプラグインを使用してパッケージ化を行うことができます。
copy-dependencies
とunpack-dependencies
の両方の目標には、オプションの excludeScope プロパティがあり、provided
の依存関係を省略するように設定できます。以下の構成は、すべての依存関係をtarget/libにコピーします。アセンブリプラグイン記述子は、 fileSet を使用してそれらのjarを含めるように変更できます。
更新:これをテストして、機能することを確認しました。アセンブリプラグインをパッケージフェーズにバインドするための構成と、アセンブリ記述子に関連する変更を追加しました。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>process-resources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<excludeScope>provided</excludeScope>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-Assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<executions>
<execution>
<id>jar-with-deps</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptors>
<descriptor>src/main/Assembly/my-Assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
my-Assembly
記述子のfileSetセクションは次のようになります。
<Assembly>
<fileSets>
<fileSet>
<directory>${project.build.directory}/lib</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.*</include>
</includes>
</fileSet>
</fileSets>
...
</Assembly>
理論的には、タグ「ignoreNonCompile」と「excludeScope」が役立つはずですが、必ずしも正しく機能するとは限らないことに注意してください。
Maven3とmaven-dependency-plugin2.4の場合、1つの解決策は次のとおりです。
<configuration>
<excludeArtifactIds>junit,mockito-all</excludeArtifactIds>
<excludeTransitive>true</excludeTransitive>
</configuration>
最新のMaven(私はMaven 3.0でテストしていました)では、これは期待どおりに機能するようですが、いくつかの注意点があります。
要求されたスコープ(dependencySet内)には、次の定義に基づく追加のスコープが含まれる場合があります。 http://maven.Apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope
したがって、コンパイルスコープを要求すると、コンパイルと提供の両方が行われます。ただし、ランタイムスコープを要求する場合は、コンパイルとランタイムを取得する必要があります(ただし提供されていません)。
これは古い投稿ですが、maven-dependency-pluginには「excludeScope」オプションがあり、「provided」または必要なスコープに設定できます。
http://maven.Apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html#excludeScope
例えば、
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<excludeScope>provided</excludeScope>
</configuration>
</execution>
</executions>
</plugin>