2012-09-06 31 views
15

Mavenは親ののpom.xmlでMavenの親プロジェクトのjarファイルを生成する方法

<packaging>pom</packaging>

句を持っている親プロジェクトが必要です。そのようなプロジェクトがインストールされると、pomファイルのみがMavenリポジトリに生成されます。親プロジェクトにJavaコードがある場合でも、Jarファイルは生成されません。それは余分な空の親プロジェクトを持つことになります。論理的には、私の図書館の一部が同時に親である可能性があります。

インストールの間にpackaging句を削除したり追加したりせずに、親プロジェクトのpomファイルとjarファイルの両方を生成する方法はありますか?

答えて

10

Maven Jar PluginとMaven Build Helperを使用します。例POM:

<?xml version="1.0" encoding="UTF-8"?> 
<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>test</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0</version> 

    <packaging>pom</packaging> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.7</version> 
     <executions> 
      <execution> 
      <id>attach-artifacts</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
       <artifact> 
        <file>test-${project.version}</file> 
        <type>jar</type> 
       </artifact> 
       </artifacts> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.4</version> 
     <executions> 
      <execution> 
      <id>default</id> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <phase>package</phase> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Mavenのビルド結果:

mvn install 
[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building test 1.0 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- build-helper-maven-plugin:1.7:attach-artifact (attach-artifacts) @ test --- 
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default) @ test --- 
[WARNING] JAR will be empty - no content was marked for inclusion! 
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ test --- 
[INFO] Installing /home/username/projects/test/pom.xml to /home/username/.m2/repository/test/test/1.0/test-1.0.pom 
[INFO] Installing /home/username/projects/test/test-1.0 to /home/username/.m2/repository/test/test/1.0/test-1.0.jar 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 0.805s 
[INFO] Finished at: Thu Sep 06 13:33:20 EDT 2012 
[INFO] Final Memory: 4M/119M 
[INFO] ------------------------------------------------------------------------ 

Mavenの実務上の注記:あなたはすべてのあなたの子供のモジュールで共通に使用される依存関係やプラグインを定義し

親モジュールは、一般的です。それはめったにそれ自身の出力を持っていません。親モジュールで行うのではなく、他のすべてのモジュール成果物を集約する「ディストリビューション」サブモジュールを作成することをお勧めします。

+2

ありがとうございました。あなたの解決策はありません。 Eclipse Workspaceで余分な空のプロジェクトを避け、プロジェクトの関係を単純化するために、親プロジェクト用のjarファイルを生成したいと思います。私は新しい人ですから、私は間違っているかもしれません。空の親プロジェクトを使用することをお勧めしますか?あなたのソリューションは、独自のjarビルドプラグインを持つ子プロジェクトと競合すると思われます。 – Kallisto

+2

子プロジェクトで使用されているプロパティ設定、依存バージョン、プラグインなどを定義する役割しか果たさないという点で、 "空"(成果物を生成しない)の親プロジェクトを作成するのはまったく問題ありません。 BTW - 私のソリューションを使用する場合は、チェックマークをクリックして回答を受け入れてください。 – noahlz

+0

あなたの答えと説明に感謝します。私は空のプロジェクトを親として使うというあなたの勧告に従うつもりです。 – Kallisto

関連する問題