【问题标题】:How can I mvn:install shaded maven artifact我如何 mvn:install 阴影 maven 工件
【发布时间】:2023-04-06 18:02:01
【问题描述】:

这应该很容易,但我遇到了来自 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 和减少了依赖的 pom 文件。 但随后安装插件安装了原始工件(没有依赖项)而不是阴影部分

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

有没有人遇到过类似的问题?有谁知道怎么解决??

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 2016-11-01
        • 2012-03-06
        • 2015-07-29
        • 1970-01-01
        • 2013-11-17
        • 2021-11-14
        • 2020-01-30
        • 2012-08-03
        相关资源
        最近更新 更多