1. ホーム
  2. java

[解決済み] Maven 2で実行可能なjarをビルドする

2023-06-13 12:24:21

質問

私はMavenのマントラには比較的新しいのですが、Mavenでコマンドライン実行可能なjarを構築しようとしています。私は依存関係をセットアップしましたが、私が mvn install を実行し、jarを実行しようとすると、2つのことが起こります。まず、メインクラスが見つかりませんが、これは修正可能です。これを修正したところ、実行時にクラスが見つからないというエラーが発生しました。

Maven は jar 内に私の依存ライブラリをパッケージングしないので、スタンドアロン アプリケーションとして jar を実行することができません。これを修正するにはどうすればよいですか。

どのように解決するのですか?

最も簡単な方法は、アセンブリを作成する際に maven-assembly-plugin と定義された jar-with-dependencies ディスクリプタを追加します。また、この uber jar 用のメイン クラス エントリを含むマニフェストを生成する必要があります。以下のスニペットは、これを行うためにアセンブリプラグインを設定する方法を示しています。

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>fully.qualified.MainClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

そして、アセンブリを生成するために、実行するだけです。

mvn assembly:assembly

ビルドの一部としてアセンブリを生成したい場合、単に assembly:single をパッケージ・フェーズにバインドします。

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>fully.qualified.MainClass</mainClass>
          </manifest>
        </archive>
      </configuration>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

そして単純に実行します。

mvn package