2012-05-04 8 views
9

私はjarファイル提供することが期待プロジェクトがあります。カスタムのビルドされたjarファイルをmainアーティファクトとして登録するには?

<packaging>jar</packaging> 

をしかし瓶がカスタム方法で構築されているので、デフォルトのパッケージは瓶で行わ:jarファイルが無効になっている

<plugin> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.3.2</version> 
    <executions> 
    <execution> 
     <id>default-jar</id> 
     <phase>none</phase> 
    </execution> 
    </executions> 
</plugin> 

が、影をつけたいときは、既存の瓶に陰影を付けます。

プロジェクトの主なアーティファクトがありません。

私はMavenのが私のカスタムツールによって作成された.jarファイルについて知らないことを前提としています。 org.apache.maven.artifact.InvalidArtifactRTExceptionを:アーティファクトのために{:antrun attachArtifact

<attachartifact file="./bin/classes.jar" classifier="" type="jar"/> 

動作しないので、私が手にエラーがアンアリと、BuildExceptionが発生した

で、それは知っているようにする方法jar}:アタッチされたアーティファクトは、対応するメインアーティファクトとは異なるIDを持つ必要があります。

これは、メインのアーティファクトを登録する方法ではありません。カスタムJavaプラグインを作成していない場合はありますか?

おかげで、 ルカシュ

答えて

1

私はJarMojoのソースをチェックして(gmaven経由で)私のGroovyとそれを解決する方法のアイデアを与えた

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
    <execution> 
     <id>set-main-artifact</id> 
     <phase>package</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      project.artifact.setFile(new File("./bin/classes.jar")) 
     </source> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

、それが動作します!:)

0

我々は取得して、同じ問題を抱えたエラー「添付アーティファクトは、その対応する主アーティファクトとは異なるIDを持っていなければなりません」。私たちは、以下のような優れたブログ記事に解決策を見つけた:in this section

http://devblog.virtage.com/2013/04/embed-and-run-ant-tasks-and-scripts-from-maven/

などの詳細、あなたはMavenのはアリ内蔵のjarとMaven構築されたjarファイルを区別することができるように分類器を追加することで問題を解決することができます。あなたは依存関係として、この瓶をつかむしたいときにいつでも(のgroupId、たartifactIdとバージョンと一緒に)その分類器を含めることも必要があります

<attachartifact file="./bin/classes.jar" classifier="foo" type="jar"/> 

注:antrun attachartifactを使用しているので、あなたはこれを必要とするだろう他のプロジェクトでは

1

この

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
      <id>attach-artifacts</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
        <artifact> 
         <file>${basedir}/bin/classes.jar</file> 
         <type>jar</type> 
        </artifact> 
       </artifacts> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
0

ような何かあなたのソリューションがインストール+相またはどこ反応器内の依存関係のみをコンパイルやテストフェーズにパッケージされていないクラスを構築する場合には、存在しないと、ビルドのために働くかもしれないが依存関係によっては見つかりません。 maven-release-pluginのようなプラグインを使用すると、コンパイルビルドが行われます。デフォルトでは、Mavenのインストール - プラグインはそう別のオプション ${project.build.directory}/${project.finalname}.jar

の線に沿って識別アーティファクトを使用するコンパイル

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
    <execution> 
     <id>set-main-artifact-compile</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      project.artifact.setFile(new File("./bin/classes")) 
     </source> 
     </configuration> 
    </execution> 
    <execution> 
     <id>set-main-artifact</id> 
     <phase>package</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      project.artifact.setFile(new File("./bin/classes.jar")) 
     </source> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

中にアンパッククラスがあります識別含めるように選択したソリューションを拡張

このようなことをする

<build> 
    <directory>bin</directory> 
    <outputDirectory>bin/classes</outputDirectory> 
    <finalName>classes</finalName> 
</build> 
関連する問題