8

maven-jar-pluginとmaven-dependency-pluginを使用して、アプリケーションの実行可能な「バンドル」を作成しようとしています。ほとんどの場合は正常に機能しますが、依存関係階層にスナップショットがある場合、コピー依存関係の目標は、スナップショット依存関係をロックされたスナップショット(タイムスタンプ付きのスナップショット)に変換するようです。

ただし、archiver-pluginのaddClasspathは、スナップショットの依存関係を変換しません。

  • libには、foolib-1.0.1-20130108.143522-8.jarがあります。
  • クラスパスにはlib/foolib-1.0.1-SNAPSHOT.jarが含まれています

そのため、アプリケーションを実行できません。

コピー依存関係にSNAPSHOTを変換しないように指示する方法、またはアーカイバプラグインにSNAPSHOTを変換するように指示する方法が見つかりません。

pom.xmlの関連するスニペットは次のとおりです。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>          
    <artifactId>maven-dependency-plugin</artifactId>           
    <version>2.5.1</version>                  
    <executions>
        <execution>
            <id>copy-libs</id>
            <phase>package</phase>    
            <goals>
                <goal>copy-dependencies</goal>                          
            </goals>
            <configuration>
                <excludeScope>provided</excludeScope>
                <outputDirectory>${package.dest}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
        <outputDirectory>${package.dest}</outputDirectory>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>${main.class}</mainClass>
            </manifest>
        </archive>
        </configuration>
</plugin>
4

1 に答える 1

10

maven-dependency-plugin 2.6の新しいオプション ( useBaseVersion ) でこれを修正できます。したがって、少なくともバージョン 2.6 が必要です。

注:私の問題は元の質問とは逆のように見えるため、useBaseVersion オプションを false に設定する必要がありました。したがって、元のバージョンではおそらく useBaseVersion をデフォルト値の true に設定する必要があります。

以下は、バージョン番号を変更し、pom で useBaseVersion を false に設定する方法の例です。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>          
    <artifactId>maven-dependency-plugin</artifactId>
    <!-- need at least 2.6 for useBaseVersion-->           
    <version>2.6</version>                  
    <executions>
        <execution>
            <id>copy-libs</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>                          
            </goals>
            <configuration>
                <excludeScope>provided</excludeScope>
                <outputDirectory>${package.dest}/lib</outputDirectory>

                <!-- useBaseVersion=false makes the jar names match those 
                     that maven-jar-plugin puts in the manifest classpath -->
                <useBaseVersion>false</useBaseVersion>
            </configuration>
        </execution>                    
    </executions>
</plugin>
于 2014-09-26T11:48:27.830 に答える