使用Maven着色排除除部分伪影以外的所有伪影

gkl3eglg  于 2023-05-22  发布在  Maven
关注(0)|答案(1)|浏览(132)

有没有一种方法可以用Maven创建一个只包含一些而不是所有依赖工件的fat jar?
更具体地说,我想有两个阴影的执行:一个包括com.acme:*,另一个包括所有其它。关键是要有两个jar--一个包含我所有的代码,另一个包含所有的第三方deps。后者很简单:

<artifactSet>
  <excludes>
    <exclude>com.acme:*</exclude>
  </excludes>
</artifactSet>

但前者不是。因为排除是在包含之后处理的,并且默认情况下所有内容都包含在内,所以以下内容将不起作用:

<artifactSet>
  <excludes>
    <exclude>*:*</exclude>
  </excludes>
  <includes>
    <include>com.acme:*</include>
  </includes>
</artifactSet>

有没有什么Maven?(对不起,我不得不)

oxf4rvwz

oxf4rvwz1#

原作者可能不需要,但经过几次尝试,我设法完成了如下结果:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.4.1</version>
    <executions>
        <execution>
            <id>exec-id</id>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <minimizeJar>true</minimizeJar>
                <artifactSet>
                    <includes>
                        <include>group.id:artifactId</include>
                    </includes>
                </artifactSet>
                <filters>
                    <filter>
                        <artifact>group.id:artifactId</artifact>
                        <includes>
                            <include>path/to/include/**</include>
                            <include>path/to/include/**</include>
                            <include>path/to/include/**</include>
                            <include>path/to/include/**</include>
                        </includes>
                    </filter>
                </filters>
                <finalName>yourFinalName</finalName> 
                <createDependencyReducedPom>false</createDependencyReducedPom>
                <outputDirectory>../your-dir</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

使用属性<artifactSet><includes>,您只定义了应该添加到outoput jar的依赖项,如果您必须过滤工件,您可以使用<filters>来过滤每个工件的包。
希望这能帮上忙。

相关问题