私は Java プロジェクトを構築するために Maven を使用するのはかなり初めてで、対処方法がわからない状況に遭遇しました。
私は 3 つの依存関係を持つ Java アプリケーションを持っていaます。ただし、構築しているプラットフォームによっては異なるアーティファクトになるため、これを実現するためにプロファイルを使用しました。ここに私のからのスニペットがあります:bccpom.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、最終的には次のようになります。clib/
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-Pathc-win32-x86-1.0.0.jarc-win32-x86_64-1.0.0.jarc-1.0.0.jar
の代わりにdependency:copywithを使用すると正しいファイル名になりますが、 のエントリは引き続き「完全修飾」アーティファクト名 (つまり) を参照します。destFileNamedependency:copy-dependenciesClass-Pathlib/c-win32-x86-1.0.0.jar
私はこれについて間違った方法で進んでいますか?私がやろうとしていることを達成するためのより簡単な方法はありますか?