web-dev-qa-db-ja.com

Intellij Java 2016&Maven:依存関係をJARに埋め込む方法は?

Intellij Java 2016.2.2およびMavenを使用して、非常にシンプルなJavaコンソールアプリケーションを作成しています。

外部ライブラリを追加したいので、次のようにMavenに依存関係を追加します。

<dependency>
    <groupId>jline</groupId>
    <artifactId>jline</artifactId>
    <version>2.12</version>
</dependency>

IDEで実行すると正常に機能しますが、外部コンソールでは機能しません(次のエラーが発生します:Java.lang.NoClassDefFoundError)。

チェックしたところ、何らかの理由で、生成したばかりのJARに外部JARが追加されていません。また、「ファイル->プロジェクト構造」で多くのことを試しましたが、それでも機能しません...

依存関係を含むJARを構築したいだけなので、次のコマンドを使用してコンソールでアプリケーションを実行できます。

Java -jar myproject.jar

どうやってやるの?ご協力いただきありがとうございます!

16
matteoh

私はついにIntellij JavaでこのJARを生成することに成功しました。

  • pom.xmlファイルに依存関係を追加する
  • ファイル->プロジェクト構造->アーティファクト->新規-> JAR->依存関係のあるモジュールから
  • メインクラスを選択し、[OK]をクリックします
  • プロジェクトのsrc/mainに「resources」フォルダーを作成します
  • この「resources」フォルダに「META-INF」(MANIFEST.MFが入っている)フォルダを移動します
  • ビルド->アーティファクトをビルドしてJARをビルドします

[〜#〜]編集[〜#〜]

それを行うためのより良い(そしてより簡単な方法)は、pom.xmlファイルに次の行を追加することです:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-Assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>your.MainClass</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-Assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

次に、「clean」および「package」mavenコマンドを使用します。

上記の最後の3つの手順(MANIFEST.MFについて)は依然として必須のようです。

27
matteoh

わかりましたので、基本的に、独自の依存関係をすべて含む(通常、依存関係は外部にある)「ファットjar」(Assemblyとも呼ばれます)を作成します。

そのためにはMavenプラグインを使用する必要があります。以下は、サンプルアセンブリプラグイン構成です jar-with-dependencies

<project>
  ...
  <build>
    ...
    <plugins>
      <plugin>
        <artifactId>maven-Assembly-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        ...
</project>

次に、単に実行します

mvn package
4