11

jarファイルを配信する予定のプロジェクトがあります。

<packaging>jar</packaging>

ただし、jarはカスタムの方法で構築されているため、jar:jarで行われるデフォルトのパッケージ化は無効になっています。

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

しかし、既存のjarにshade:shadeを適用したい場合、エラーが発生します

プロジェクトのメインアーティファクトは存在しません。

mavenは、カスタムツールによって作成された.jarファイルを認識していないと思います。antrun attachArtifactが機能しないため、通知する方法

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

私が得るエラーは

Ant BuildExceptionが発生しました:org.apache.maven.artifact.InvalidArtifactRTException:アーティファクト{:jar}の場合:アタッチされたアーティファクトは、対応するメインアーティファクトとは異なるIDを持っている必要があります。

したがって、これはメインアーティファクトを登録する方法ではありません...(カスタムJavaプラグインを作成せずに)何かありますか?

ありがとう、Lukasz

4

4 に答える 4

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>
于 2013-04-24T19:40:48.417 に答える
1

あなたのソリューションは install+ フェーズへのビルド、またはリアクターに依存関係がない場合に機能する可能性がありますが、コンパイルまたはテスト フェーズへのビルドのみの場合、パッケージ化されていないクラスは依存関係によって検出されません。maven-release-plugin などのプラグインを使用すると、コンパイルするためのビルドが行われます。

選択したソリューションを拡張して、コンパイル中にアンパックされたクラスを識別することを含める

<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>

デフォルトでは、maven-install-plugin は次の行に沿って識別されたアーティファクトを使用します。 ${project.build.directory}/${project.finalname}.jar

したがって、別のオプションは次のようになります

<build>
    <directory>bin</directory>
    <outputDirectory>bin/classes</outputDirectory>
    <finalName>classes</finalName>
</build>
于 2014-08-19T21:55:56.930 に答える
0

「添付されたアーティファクトには、対応するメインのアーティファクトとは異なるIDが必要です」というエラーが発生するという同じ問題がありました。次の優れたブログ投稿で解決策を見つけました。

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

このセクションで詳しく説明されているように、分類子を追加することで問題を解決できるため、Maven は ant で作成された jar と maven で作成された jar を区別できます。antrun attachartifact を使用しているため、次のものが必要になります。

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

この jar を他のプロジェクトの依存関係として取得する場合は常に、その分類子を (groupId、artifactId、および version と共に) 含める必要があることに注意してください。

于 2013-04-24T17:59:25.143 に答える