我怎么能mvn:安装阴影maven工件

时间:2014-12-24 13:27:54

标签: maven maven-shade-plugin maven-install-plugin

这应该很容易,但我在maven-install插件中遇到了奇怪的行为。

我需要将一些常见的依赖项重新打包到我的项目中以避免依赖冲突。为此,我使用了配置了重定位的shade插件:

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
                <execution>
                    <id>do_shade</id>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <createDependencyReducedPom>true</createDependencyReducedPom>
                        <shadedArtifactAttached>false</shadedArtifactAttached>
                        <createSourcesJar>true</createSourcesJar>
                        <relocations>
                            <relocation>
                              <pattern>com.google.common</pattern>
                              <shadedPattern>com.myproject.google.common</shadedPattern>
                            </relocation>
                            <relocation>
                                <pattern>org.apache.commons</pattern>
                                <shadedPattern>com.myproject.commons</shadedPattern>
                            </relocation>
                        </relocations>
                    </configuration>
                </execution>
            </executions>
        </plugin>

shade插件正确地完成了它的工作并生成了阴影工件 com.myproject-myproject-.jar 和dependecy-reduced pom文件。 但是然后安装插件安装了原始工件(没有依赖项)而不是带阴影的

此外,在安装插件问题之前,我的CI服务器(jenkins)构建了项目并且正确发布了阴影工件和依赖关系缩减了pom到nexus存储库(!!)。所以现在我从nexus下载工件,我的本地存储库中有正确的jar,但是如果我使用安装插件,则罐子不会很好。

有没有人有类似的问题?有谁知道如何解决它们?

2 个答案:

答案 0 :(得分:0)

要回答我自己的问题,问题是我后来标记了所提供的依赖关系,以便他们不会被传递到我的其他项目中。这导致阴影插件不包含在阴影罐中。

答案 1 :(得分:0)

我也遇到了这个问题,其中 mvn install 会在我的目标目录中构建一个着色的 jar,但将非着色的 jar 安装到我的本地 Maven 存储库中。

最终证明的原因是我在 maven-shade-plugin 配置中定义了 <finalName>。最终以该特定名称保存了阴影 jar,而非阴影 jar 使用默认的 jar 名称,mvn install 在安装时必须查找该名称。在没有 <finalName> 的情况下,它会将着色的 jar 适当地复制到本地 Maven 存储库中。