3

私はおそらくこの質問のようなものが必要です

依存関係のある Maven ビルド アセンブリ

または mavenアセンブリは、依存関係とクラスパスを使用してjarを作成します

実行可能な jar を実行するにはどうすればよいですか?

コマンドラインで java -jar を実行すると、スレッド「メイン」で例外が発生します java.lang.NoClassDefFoundError: org/apache/log4j/Logger

/lib ディレクトリの下にすべての依存関係の jar を含む、ターゲット ディレクトリと lib ディレクトリに executable.jar を作成しました。

これは私の pom.xml のスニペットです。何を変更すればよいですか?

</dependencies> 
 <dependency>
<groupId><gId></groupId>
<artifactId><aId></artifactId>
<version><v></version>
</dependency>
<dependency>
<groupId>gI2</groupId>
<artifactId>aI2</artifactId>
<version>v</version>
</dependency>
</dependencies>
<build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.proj.app</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
4

3 に答える 3

3

Maven Shade プラグインを使用

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.6</version>
    <configuration>
        <createDependencyReducedPom>true</createDependencyReducedPom>
        <filters>
            <filter>
                <artifact>*:*</artifact>
                <excludes>
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                </excludes>
            </filter>
        </filters>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass><Your main class here></mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

これにより、すべての依存関係が 1 つの jar に含まれ、メイン クラスがマニフェスト ファイルに自動的に追加されます。

「パッケージ」ゴールを必ず実行してください。

于 2013-10-08T18:55:15.257 に答える
0

ディストリビューションには、アプリケーションで使用しているライブラリを含むすべての JAR ファイルが必要です。アセンブリ プラグインはまさにその要件に合わせて設計されています。

私は通常、アセンブリ プラグインを使用して、ディストリビューション全体を含む ZIP ファイルを作成します。これは、私自身のアプリケーションの JAR ファイル、すべての必要な構成ファイル、そしてもちろんすべてのライブラリ JAR です。

さらに、実行可能な JAR ファイルには適切なマニフェスト ファイルが必要です。つまり、正しいメイン クラス エントリとクラス パスが必要です。

于 2013-10-08T12:11:16.133 に答える