web-dev-qa-db-ja.com

パラメータリソースのシェード:クラスorg.Apache.maven.plugins.shade.resource.ManifestResourceTransformerで「リソース」が見つかりません

私はMavenプロジェクトに取り組んでいます。 jmhベンチマークをプロジェクトに統合しようとしています。私のMavenプロジェクトのpom.xml ...

<parent>
    <groupId>platform</groupId>
    <artifactId>platform-root</artifactId>
    <version>3.0-SNAPSHOT</version>
    <relativePath>../../pom.xml</relativePath>
</parent>

<artifactId>platform-migration</artifactId>
<packaging>jar</packaging>
<name>Platform Migration</name>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compile.source>1.7</maven.compile.source>
    <maven.compile.target>1.7</maven.compile.target>
    <jmh.version>1.1.1</jmh.version>
    <jersey-version>2.22.1</jersey-version>
    <uberjar.name>rest-benchmarks</uberjar.name>
</properties>


<dependencies>
    <dependency>
        <groupId>platform</groupId>
        <artifactId>platform-commons</artifactId>
        <version>${platform.version}</version>
    </dependency>

    <dependency>
        <groupId>platform</groupId>
        <artifactId>platform-persistence</artifactId>
        <version>${platform.version}</version>
    </dependency>

    <dependency>
        <groupId>platform</groupId>
        <artifactId>platform-testing</artifactId>
        <version>${project.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.openjdk.jmh</groupId>
        <artifactId>jmh-core</artifactId>
        <version>${jmh.version}</version>
    </dependency>
    <dependency>
        <groupId>org.openjdk.jmh</groupId>
        <artifactId>jmh-generator-annprocess</artifactId>
        <version>${jmh.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>${jersey-version}</version>
    </dependency>

</dependencies>


<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                implementation="org.Apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>org.openjdk.jmh.Main</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

「mvncleaninstall」を使用してプロジェクトをビルドすると、次のエラーが発生しました

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-shade-plugin:3.0.0:shade (default) on project platform-migration: Unable to parse configuration of mojo org.Apache.maven.plugins:maven-shade-plugin:3.0.0:shade for parameter resource: Cannot find 'resource' in class org.Apache.maven.plugins.shade.resource.ManifestResourceTransformer -> [Help 1]

このエラーが発生している理由がわかりませんか?

10
neelrotno

私自身の設定に影響を与えるこの原因を見つけ、他の人に役立つ場合に備えてここで共有しています。

私の場合、原因はmaven-shade-plugin構成を含む親pomと私自身のpomです。 Mavenがこれらをマージする方法は正しく機能しません。 Mavenはtransformerタグを表示順に照合し、それらをマージしているようです。

これを理解するには、mvn help:effective-pomを使用して、結果のmaven-shade-plugin構成を探します。私の場合、<resource>タグがManifestResourceTransformerに追加され、このリソースは親pomのmaven-shade-plugin構成の最初のエントリと一致しました。

<id><execution>に追加すると、問題が解消されます。

<plugins>
  <plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
      <execution>
        <id>shade-my-jar</id>
...

両方の構成で同じデフォルトIDが使用されていたと思われます。したがって、重要なのは、プラグインの実行ごとに一意のIDを持つことです。

12
ash

ザ・ ManifestResourceTransformer 内の既存のエントリを許可します マニフェスト 置き換えられ、新しいエントリが追加されます。

たとえば、次のサンプルセット

  • app.main.classプロパティの値へのMain-Classエントリ、
  • maven.compile.sourceプロパティの値へのX-Compile-Source-JDKエントリと
  • maven.compile.targetプロパティの値へのX-Compile-Target-JDKエントリ。
<project>
  <build>
    <plugins>
      <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.Apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <manifestEntries>
                    <Main-Class>${app.main.class}</Main-Class>
                    <X-Compile-Source-JDK>${maven.compile.source}</X-Compile-Source-JDK>
                    <X-Compile-Target-JDK>${maven.compile.target}</X-Compile-Target-JDK>
                  </manifestEntries>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

これが正しい構成だと思います

0