私は Java プロジェクトを構築するために Maven を使用するのはかなり初めてで、対処方法がわからない状況に遭遇しました。
私は 3 つの依存関係を持つ Java アプリケーションを持っていa
ます。ただし、構築しているプラットフォームによっては異なるアーティファクトになるため、これを実現するためにプロファイルを使用しました。ここに私のからのスニペットがあります:b
c
c
pom.xml
<profiles>
<profile>
<id>win32</id>
<activation>
<os>
<family>windows</family>
<arch>x86</arch>
</os>
</activation>
<dependencies>
<dependency>
<groupId>com.seanbright</groupId>
<artifactId>c-win32-x86</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</profile>
<profile>
<id>win64</id>
<activation>
<os>
<family>windows</family>
<arch>amd64</arch>
</os>
</activation>
<dependencies>
<dependency>
<groupId>com.seanbright</groupId>
<artifactId>c-win32-x86_64</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</profile>
</profiles>
a
および成果物は、b
プラットフォームに依存せず、プロファイルと共にアクティブ化されないため、POM レベルで依存関係としてリストされます。簡潔にするために、ここでは示していません。
ここで、プロジェクトの実行可能 JAR をビルドし、コードから生成された JAR と一緒にディレクトリに 、 、および を含めたいa
のでb
、最終的には次のようになります。c
lib/
target/my-project-1.0.0.jar
target/lib/a-1.0.0.jar
target/lib/b-1.0.0.jar
target/lib/c-1.0.0.jar
のマニフェストにmy-project-1.0.0.jar
は適切なクラスパスが含まれているため、ダブルクリックしてアプリケーションを起動できます。dependency:copy-dependencies
とjar:jar
ゴールを使用して、このすべてを機能させます。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>copy-dependencies</id>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>com.seanbright.myproject.Launch</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
そして...それは動作します。唯一の問題は、アクティブなプロファイルとして、またはアクティブなプロファイルに応じて、ディレクトリc
にコピーされる(そしてマニフェストに追加される)ことです。lib/
Class-Path
c-win32-x86-1.0.0.jar
c-win32-x86_64-1.0.0.jar
c-1.0.0.jar
の代わりにdependency:copy
withを使用すると正しいファイル名になりますが、 のエントリは引き続き「完全修飾」アーティファクト名 (つまり) を参照します。destFileName
dependency:copy-dependencies
Class-Path
lib/c-win32-x86-1.0.0.jar
私はこれについて間違った方法で進んでいますか?私がやろうとしていることを達成するためのより簡単な方法はありますか?