仅使用外部库的阴影罐

时间:2016-02-04 15:12:29

标签: maven maven-3 maven-shade-plugin

我想问一下关于Maven Shade插件的问题。有没有办法用当前项目中的类创建一个jar,以及一个只包含外部库的阴影jar?

我正在通过网络移动最终的工件,如果我只需要复制" slim"那就太棒了。 jar,如果没有外部依赖关系发生了变化。

1 个答案:

答案 0 :(得分:2)

默认情况下,Maven已经通过Maven Jar Plugin生成您提到的苗条jar(即,从项目中提供类和资源的jar),默认情况下会在package阶段生成(即例如,调用mvn clean packagemvn clean install,级联中也会调用package阶段。

如果你想生成一个只提供外部库的额外jar,无论出于什么原因,你都可以使用Maven Shade Plugin。默认情况下,它还会添加您的项目类和资源。

应用下面的配置,您将改为指示插件仅打包外部库并跳过项目类和资源:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <artifactSet>
                            <excludes>
                                <exclude>${project.groupId}:${project.artifactId}:*</exclude>
                            </excludes>
                        </artifactSet>
                        <finalName>${project.artifactId}-${project.version}-only-dependencies</finalName>
                        <shadedArtifactAttached>false</shadedArtifactAttached>
                        <createDependencyReducedPom>false</createDependencyReducedPom>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

请注意exclude元素,它有效地跳过了您的项目内容。

此外,需要配置finalName元素以避免插件的默认机制,该机制将使用fat / uber jar(jar + dependencies)替换原始默认jar(如上所述)。登记/> 根据{{​​3}}:

  

着色artifactId的名称。如果您想更改本机工件的名称,可以使用该设置。如果将其设置为不同的值,则不会执行文件替换

运行mvn clean package您将拥有默认的jar文件和一个仅包含外部依赖项并以only-dependencies后缀结尾(在jar扩展名之前)的附加jar文件。

此外,您可以考虑将上述整个配置包装在official documentation中,以避免将此行为作为默认构建的一部分(推荐)。

只需在包装配置文件中移动上面的配置,如下所示:

<profiles>
    <profile>
        <id>assemble-external-jars</id>
        <build>
           ....
        </build>
    </profile>
</profiles>

然后通过以下方式运行它(如果需要)

mvn clean package -Passemble-external-jars