Maven Shade 插件生成两个 Jars

标签 maven maven-assembly-plugin maven-shade-plugin

到目前为止,我一直在使用 Maven 程序集插件为每个 Artifact 生成两个 JAR - 已编译的源代码和依赖项 - 原因很简单 - 通过网络仅部署已编译的源代码比部署一体化 JAR 快得多具有 40 MB 的数据。

由于覆盖了内部文件,我必须切换为 Maven Shade 插件才能使用 <transformers>特征。但是我无法同时运行这两个执行:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
      <execution>
        <id>shade-libs</id>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <outputFile>target/assembly/${project.artifactId}-libs.jar</outputFile>
          <artifactSet>
            <excludes>
              <exclude>...</exclude>
            </excludes>
          </artifactSet>
          <transformers>
            <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>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
      <execution>
        <id>shade-main</id>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <outputFile>target/assembly/${project.artifactId}.jar</outputFile>
          <artifactSet>
            <includes>
              <include>...</include>
            </includes>
          </artifactSet>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>

当我运行mvn package时,只运行第二次执行。第一个总是被忽略。使用 Maven 组装插件,它工作得很好。

当然解决方案可以是同时使用程序集和阴影插件,但我希望找到更一致的解决方案。

最佳答案

不要定义插件两次,只需定义一次但有两个 execution 部分。所以在你的情况下它会是:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
      <execution>
        <id>shade-libs</id>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <outputFile>target/assembly/${project.artifactId}-libs.jar</outputFile>
          <artifactSet>
            <excludes>
              <exclude>...</exclude>
            </excludes>
          </artifactSet>
          <transformers>
            <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>
          </transformers>
        </configuration>
      </execution>
      <execution>
        <id>shade-main</id>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <outputFile>target/assembly/${project.artifactId}.jar</outputFile>
          <artifactSet>
            <includes>
              <include>...</include>
            </includes>
          </artifactSet>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>

关于Maven Shade 插件生成两个 Jars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17845423/

相关文章:

java - 阴影 JAR 的传递依赖

maven - 编写maven自定义报告插件;如何生成报告的 html 正文或 "middle"?

java - 错误: Could not find or load main class Maven Spring Boot Application - Executable JAR

java - Maven 没有将所有依赖项添加到 jar

maven-2 - 禁用default-jar执行

java - 使用可执行 jar 中的资源文件

java - Maven 无法解析 mojo 的配置 - 错误的类

java - Maven 程序集插件 - 如何安装存档并执行

java - Maven Assembly Plugin 上传的引用工件

java - maven-shade-plugin 错误 : Cannot find setter, 加法器或 org.apache.maven.plugins.shade.resource.ManifestResourceTransformer 中的字段 'resource'