2011-09-23 13 views
7

私はwarファイルをビルドするmavenプロジェクトを持っていますが、maven-jar-pluginを使って同じプロジェクトにjarファイルを作成しています。maven build with war and jar奇妙なアーティファクトを内部リポジトリにプッシュ

--DISCLAIMER-- これは「正しい」方法ではありませんが、これをjarプロジェクトといくつかのサードパーティーのプラグインと別の戦争プロジェクトに分割する際に発生するいくつかの問題があります。

これでいくつかの奇妙な動作が見られます。以下は私のプロジェクト構造です。私はこのプロジェクトをビルドするとき

warproject 
-src 
--main 
---webapp 
----WEB-INF 
-----web.xml 
---java 
----com.test.myclass 
-----test.java 
-pom.xml 

、しかし私は、私の地元の.m2レポでは、奇妙な問題が発生した何かを私のターゲットディレクトリ内の正しい戦争とjarファイルを取得します。インストールされているwarファイルの名前はwar-jar-0.0.1-SNAPSHOT.warと正しく指定されていますが、このファイルの内容はmy jarファイルの内容です。逆にすると、これも発生します。つまり、プロジェクトをセットアップしてmaven-war-pluginを使用してwarをビルドすると、ターゲットディレクトリ内のアーカイブは正しいものの、ローカルリポジトリにwarファイルの内容が入ったjarファイルがあります。以下は私が使用しているpomファイルです。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.test</groupId> 
    <artifactId>war-jar</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <configuration> 
        <jarName>${project.artifactId}-${project.version}-client</jarName> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-a-jar</id> 
         <phase>package</phase> 
         <goals> 
          <goal>jar</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
     <resources> 
      <resource> 
       <directory>src/main/java</directory> 
      </resource> 
      <resource> 
       <directory>src/main/resources</directory> 
      </resource> 
     </resources> 
    </build> 

</project> 

コンソールの出力は次のとおりです。これは、jarが戦争としてアップロードされていることを示しています。

Installing /home/me/work/src/war-jar/target/war-jar-0.0.1-SNAPSHOT.jar to /home/me/.m2/repository/com/test/war-jar/0.0.1-SNAPSHOT/war-jar-0.0.1-SNAPSHOT.war 

--update 私はこの作業を得たが、私は、パッケージからインストールするために、私の「メイクジャー」実行の位相を変更する必要がありました。これはうまく動作し、正しい成果物がアップロードされますが、なぜこれが違いになるのか混乱しています。当然のことながら、アーティファクトは異なるライフサイクルフェーズで生成されるため、プロジェクトの元のインストール時に周辺には存在しないため、間違ったファイルはアップロードされません。これは「ハック」のように思えますが、なぜこれがこのように動作しているのか理解したいと思います。

+0

jar/warをビルドするために使用するコマンドは何ですか? mvnをインストールしますか? –

+0

はいmvnはプロジェクトにインストールします。 – broschb

答えて

4

解決策に役立つ情報がないため、私自身の質問に答えています。私の解決策に関する私の元の質問に私の更新を参照してください。

2

これを実現するには、maven-install-pluginの設定を指定する必要があります。 <build>に以下のプラグイン設定を追加してください。

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-install-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>install</phase> 
        <goals> 
         <goal>install-file</goal> 
        </goals> 
        <configuration> 
         <packaging>jar</packaging> 
         <artifactId>${project.artifactId}</artifactId> 
         <groupId>${project.groupId}</groupId> 
         <version>${project.version}</version> 
         <file> 
          ${project.build.directory}/${project.artifactId}-${project.version}.jar 
         </file> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
+0

これはそれほどではありません。これは私の瓶をレポにインストールします。私はこれを持っていましたが、できるだけシンプルに私の例を作るためにそれを削除しました。私はレポにjarとwarの両方を取得できますが、問題は私のwarファイルにjarファイル内の内容が含まれていることです。元の質問をコンソール出力で更新しました。 – broschb

4

これも

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <executions> 
    <execution> 
     <!-- 
     When also running maven-jar-plugin correct maven-war-plugin's ID 
     from "default-war" to "default-jar" 
     --> 
     <id>default-jar</id> 
     <phase>package</phase> 
     <goals><goal>war</goal></goals> 
     <configuration> 
     ... 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

が効果的なPOMを分析し、プロジェクトをそのままに動作する理由を理解するにはhttp://maven.apache.org/guides/mini/guide-default-execution-ids.html

を参照してください、動作します。

関連する問題