2012-05-09 7 views
10

Maven SNAPSHOT MANIFESTファイルのMavenアセンブリを使用したjarファイルの名前が一致しない

2つのMaven 3プロジェクトビルド。

ビルド1には、Nexusに展開されるスナップショットジャーがあります。

ビルド2は、mvn clean package assembly:singleコマンドを使用してパッケージ化され、圧縮された1.0.0-SNAPSHOTのようなスナップショットに依存します。

我々はに実行する問題:アセンブリが作成されている時折 、JARのMANIFESTファイルが時々some.jar.1.0.0-SNAPSHOTを言うだろうし、時にはそれがsome.jarを言うだろう。 1.0.0-datetime stamp、クラス定義されていないエラーが発生します。

マニフェストファイルでこの名前の問題を回避する方法はありますか?

--edit--

さらなる研究は、以下のことを発見しました:

「スナップショットがレポから解決した場合、それは原子炉や地元から来たならば、それは 、タイムスタンプされますレポは、それは-snapshotになります。 プラグインはMavenの解決ロジックを呼び出すので、これは、コアのmaven 動作です。」

これは正確な私ですその中に入っているssue。 2番目のビルドマニフェストファイルは常に./lib/Framework-1.0.0-SNAPSHOT.jarのエントリを持ちます。実際のjarファイル名は./lib/Framework-1.0.0-SNAPSHOT.jarの間で変更されます。 ./lib/Framework-1.0.0-timestamp.jar上記の引用に基づいて。

+0

[This(http://stackoverflow.com/questions/2516860/maven-how-to-create-assembly-with-snapshot-artifacts-without-timestamps-file-na)が役立つかもしれません、outputfilenamemappingの設定について説明していますスナップショットでファイル名を一貫させる。 – prunge

+1

SNAPSHOTのマニフェストはどのように生成され、どのようにこの情報を生成するように構成されていますか?さらにmvn cleanパッケージアセンブリ:なぜなら、単にmvn cleanパッケージ原因パッケージが呼び出されるのではなく、呼び出された単一パッケージがアセンブリされたアセンブリプラグインを呼び出すからです。 – khmarbaise

+0

SNAPSHOT自体のマニフェストはありません。問題のマニフェストは2番目のビルドにあります。そして、協力者の助けを借りて、私たちはこれを見つけました 'スナップショットがレポから解決された場合、原子炉またはローカルレポから来たスナップショットはタイムスタンプされ、それから-SNAPSHOTになります。プラグインはmaven解決論理を呼び出すので、これはコア動作です。 これは私が抱えている厳しい問題です。私はこれを回避する必要があります。 package assembly:singleがなぜ呼び出されているのかは、私たちが全体としてmavenを初めて使ったからです。 – Thaldin

答えて

6

<dependencySet>では、例えば<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>

を設定する必要があります。

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
    <id>appserverB</id> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <dependencySets> 
    <dependencySet> 
     <outputDirectory>/lib</outputDirectory> 
     <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping> 
     <includes> 
     <include>application:logging</include> 
     <include>application:core</include> 
     <include>application:utils</include> 
     <include>application:appserverB</include> 
     </includes> 
    </dependencySet> 
    </dependencySets> 
</assembly> 

あなたがあなた自身のためにそれを複製して追加する必要があります内蔵のアセンブリ記述子のいずれかを使用している場合outputFileNameMappingあなた自身入り口

0

コピーの依存関係が必要な場合。たとえば :このに実行し、スティーブン・コノリーからの回答を参照してくださいが、まだ例外を持ってしまう人のために

   <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-dependency-plugin</artifactId> 
        <version>2.8</version> 
        <executions> 
         <execution> 
          <id>copy</id> 
          <phase>package</phase> 
          <goals> 
           <goal>copy-dependencies</goal> 
          </goals> 
          <configuration> 
           <outputDirectory>${project.build.directory}</outputDirectory> 
           <useBaseVersion>false</useBaseVersion> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
0

、これはいくつかの依存関係が自分の名前で分類器を持っているという事実によるものであるかもしれません。使用dependecyは分類器を持っていない場合でも、これは動作します

<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping> 

:次に、あなたは、オプションの値としてdashClassifierを使用するパターンを適応する必要があります。

詳細はdocumentation for the assembly pluginを参照してください。

関連する問題