1

这应该很容易,但我遇到了 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>

阴影插件正确地完成了它的工作,并产生了阴影工件com.myproject-myproject-.jar和减少了依赖的 pom 文件。但是随后 install plugin 安装了原始工件(没有依赖项)而不是阴影中的.

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

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

4

2 回答 2

0

为了回答我自己的问题,问题是我后来将要着色的依赖项标记为已提供,这样它们就不会被传递到我的其他项目中。这导致阴影插件不将它们包含在阴影 jar 中。

于 2014-12-24T13:51:54.893 回答
0

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

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

于 2021-04-15T16:48:01.790 回答