当前位置: 首页 > 知识库问答 >
问题:

马文阴影插件,用于生产两个罐子

高宏峻
2023-03-14

到目前为止,我一直在使用maven汇编插件为每个工件生成两个JAR——编译源和依赖项——原因很简单——在网络上仅部署编译源比部署具有40 MB数据的多合一JAR要快得多。

由于覆盖了内部文件,我不得不切换到maven shade插件才能使用

<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包时,只运行第二次执行。第一个总是被忽略。使用maven汇编插件,它工作得很好。

当然,解决方案可以是同时使用汇编和阴影插件,但我想找到更一致的解决方案。


共有1个答案

郭兴文
2023-03-14

与其定义两次插件,不如简单地定义一次,但有两个执行部分。所以在你的情况下是:

<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>
 类似资料:
  • 以下部分显示了my pom.xml中shade插件的配置: 然而,一些被排除的文件(似乎??)被偷偷地放入输出jar文件中: 那么,阴影插件配置中有什么不正确的地方呢?

  • 我试图在spring boot应用程序中构建shaded jar,但是遇到了一些问题。我不知道我做错了什么。我还阅读了以下链接,但没有运气maven-shade-plugin错误:无法在org . Apache . maven . plugins . shade . resource . manifestresourceformer中找到“resource”的setter、adder或field

  • 这似乎不起作用...我试图制作一个具有多个依赖项的uber jar,One-Jar似乎过时了,我不能使用默认的gradle uberJar构建器或影子jar。

  • 我最终将两个不同的pom文件(一个用于常规jar文件,一个用于影子jar)发布到同一个URL,其中一个覆盖另一个。这种行为导致客户下载默认的jar,但在pom文件中没有任何依赖项。 我尝试了许多方法来禁用shadowJar pom文件,但没有任何成功。我怎么让它工作?

  • 我在pom中有一个部分.xml 我想排除*。SF和*。来自最终jar的DSA文件。但我得到了以下信息: 并且不排除文件。有人知道如何克服它吗?

  • 在我当前的项目设置中,maven shade插件的执行非常不稳定。这个插件看起来像是在我构建父模块之后执行的,但是在那个实例中执行之后,它在独立构建子模块时无法执行。 我的父母是 还有孩子pom 以及在具有上述pom的子模块上运行“安装”目标时的构建输出 如您所见,尽管在< code >中定义了执行,maven shade插件并没有执行