5

実行可能な jar ファイルを作成するために、pom.xml に以下を追加します。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>my.main.Class</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

結果は (MANIFEST.MF)

...
Class-Path: library1-8.10-SNAPSHOT.jar hessian-4.0.7.jar library2-8.10-SNAPSHOT.jar json-lib-2.2.3-jdk15.jar ezmorph-1.0.6.jar library3-8.10-SNAPSHOT.jar commons-io-1.4.jar
...

など

つまり、jar のバージョンがファイル名に含まれています。私はそれなしでそれをしたい:

Class-Path: library.jar hessian.jar library2.jar json-lib.jar ezmorph.jar library3.jar commons-io.jar

lib-folder で名前が付けられているためです。

Maven 2.2 を使用しているため、classpathLayoutType と customClasspathLayout は使用できません (まったく役に立たない場合)。

誰でも助けることができますか?

4

1 に答える 1

11

libディレクトリにバージョンがないのはなぜですか?Mavenが提供する適切な依存関係管理を使用していませんか(そして、そもそもMavenを使用する主な理由の1つです)。

システムにインストールされているライブラリのバージョンを簡単に判断できないため、バージョンのないjarを使用することはお勧めできません。問題は、それClass-Pathが間違っているということではなく、ライブラリをバージョン管理する必要があるということです。残りのビルドに問題があります。では、どのように依存関係を宣言し、どのように最終パッケージを構築しますか?

本当にそれを実行したい場合は、maven-archiverをカスタマイズして、を指定し、を指定することがclasspathLayoutTypeできます。例えば:customcustomClasspathLayout${artifact.artifactId}.${artifact.extension}

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <classpathLayoutType>custom</classpathLayoutType>
                    <customClasspathLayout>lib/${artifact.artifactId}${artifact.dashClassifier?}.${artifact.extension}</customClasspathLayout>
                    <mainClass>my.main.Class</mainClass>
                </manifest>
            </archive>
        </configuration>
    </plugin>

lib/(プレフィックスを追加したことに注意してください。自由に削除するか、必要なものに置き換えてください)

于 2013-01-08T16:53:56.067 に答える