maven-shade-plugin - 在类org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中找不到'resource'

17

我直接从Apache Maven文档https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html中复制了Maven Shade插件的配置。

这是我的当前设置:

      <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
      <execution>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <manifestEntries>
                <Main-Class>com.my.app.MainClass</Main-Class>
                <X-Compile-Source-JDK>1.8</X-Compile-Source-JDK>
                <X-Compile-Target-JDK>1.8</X-Compile-Target-JDK>
              </manifestEntries>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                <resource>.properties</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/spring.handlers</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/spring.schemas</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/spring.tooling</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/spring.factories</resource>
            </transformer>              
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>

我遇到了以下错误:

[ERROR]在cpms-batch项目的默认构建上执行maven-shade-plugin:3.1.0:shade失败:无法解析mojo org.apache.maven.plugins:maven-shade-plugin:3.1.0:shade的配置参数resource:在类org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中找不到'resource'->[帮助1]。导致这个错误的原因是不能在类org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中找到'resource'。该错误由org.apache.maven.lifecycle.LifecycleExecutionException引起,该异常由org.apache.maven.DefaultMaven.doExecute和org.apache.maven.cli.MavenCli.execute调用。 最后,org.codehaus.plexus.component.configurator.ComponentConfigurationException也是此问题的根本原因之一。

我看到很多人关于这个错误的问题,但没有答案: 参数资源的遮蔽:在类org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中找不到'resource'

在类org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中找不到'resource'

有人能解决它或找到原因吗?


Spring Boot不需要Maven Shade插件:https://stackoverflow.com/a/43613830/3810038 - John Red
3个回答

30

这篇文章解决了我的问题:https://github.com/spring-projects/spring-boot/issues/384

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.handlers</resource>
                            </transformer>
                            <transformer
                                implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
                                <resource>META-INF/spring.factories</resource>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.schemas</resource>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>${start-class}</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

9
希望能够得到解释。GitHub 上的贴子旧了,什么也没解释。话虽如此,这个解决方案确实解决了我的问题。 - markthegrea

9

Spring Boot有自己的maven-shade-plugin配置。在您的pom.xml文件中添加以下属性:

<properties>
  <start-class>com.lionmint.core.test.integration.apns.mock.MockAPNSServer</start-class>
</properties>

9
这可能听起来很蠢,但你需要在你的阴影插件配置中添加一个id和一个phase(我不知道为什么,但它有效)。
<executions>
  <execution>
    <id>shade-jar-with-dependencies</id>
    <phase>package</phase>
    <goals>
      <goal>shade</goal>
    </goals>
    <configuration>
      <transformers>
        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
          <manifestEntries>
            <Main-Class>com.my.app.MainClass</Main-Class>
          </manifestEntries>
        </transformer>
      </transformers>
    </configuration>
  </execution>
</executions>

谢谢伙计,不知道为什么变形金刚的文档里没有包含这个例子。 - Adam D.
是的,在添加了id标签之后,它起作用了。我已经在我的pom.xml中加入了这个阶段。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接