使用 maven-shade-plugin 保留所有原始类和仅来自 deps 的类

问题描述

我正在为具有大量依赖项的项目着色。我需要保留原始人工制品中的所有内容,并且只包含其他项目中的类。听起来很简单吧? 唯一的问题是 groupId 到处都是,我似乎无法获得干净的配置。

<filter>
  <artifact>*:*</artifact>
  <includes>
    <include>**/*.class</include>
  </includes>
</filter>
<filter>
  <artifact>${project.groupId}:${project.artifactId}</artifact>
  <includes>
    <include>**</include>
  </includes>
</filter>

这显然是行不通的,因为每个过滤器只保留它过滤的东西,所以原始人工制品中的资源丢失了。

我不想为每个工件添加过滤器。太多了,为什么我要一遍又一遍地重复依赖项标签。我也不想挑选要从依赖项中排除的资源,因为我并不总是知道它们是什么,而且我不想在这里维护对它们的更改(尽管这是路线我暂时离开了)。

artifactSet 没有帮助,因为它只包含或排除了工件,而 DontIncludeResourceTransformer 也没有帮助,因为它作用于最终过滤的资源集。

允许过滤器位于 artefactSet 中可能是值得的:

<artifactSet>
  <includes>
    <include>*:*</include>
  </includes>
  <filters>
    <filter>
      <includes>
        <include>**/*.class</include>
      </includes>
    </filter>
  </filters>
</artifactSet>
<artifactSet>
  <includes>
    <include>${project.groupId}:${project.artifactId}</include>
  </includes>
</artifactSet>

或者,创建一个“filterSet”标签,将过滤操作分支并在最后重新组合资源:

<filters>
  <filterSet>
    <filter>
      <artifact>*:*</artifact>
      <includes>
        <include>**/*.class</include>
      </includes>
    </filter>
  </filterSet>
  <filterSet>
    <filter>
      <artifact>${project.groupId}:${project.artifactId}</artifact>
      <includes>
        <include>**</include>
      </includes>
    </filter>
  </filterSet>
</filters>

或者,在过滤器中添加一个布尔值“branch/preserve/pin”标签

<filter>
  <artifact>*:*</artifact>
  <includes>
    <include>**/*.class</include>
  </includes>
</filter>
<filter>
  <artifact>${project.groupId}:${project.artifactId}</artifact>
  <preserve>true</preserve>
</filter>

我也看到了

从 1.6 版开始,minimizeJar 将尊重 专门标记为包含在过滤器中。

但我仍然想根据实际需要改进最终的类集。所以包含 **/*.class 的过滤器已经失效,因为没有配置minimizeJar 行为的开关。

看起来 maven-assembly-plugin 帮不上忙,所以我不得不这样做并希望最好

<filter>
  <artifact>*:*</artifact>
  <excludes>
    <exclude>**/*.sql</exclude>
    <exclude>**/*.xsd</exclude>
    <exclude>**/*.json</exclude>
    <exclude>**/*.bat</exclude>
    <exclude>**/*.dll</exclude>
    <exclude>**/*.lib</exclude>
    <exclude>**/*.properties</exclude>
    <exclude>**/*.exclude</exclude>
    ...
  </excludes>
</filter>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)