使用 maven-shaded-plugin 安装 über jar

Install über jar with maven-shaded-plugin

我一直在使用 maven 程序集插件来创建 uber jar 并部署到 Artifactory。 我切换到 maven shade 插件来遮蔽一些依赖项。 现在我的 jar 没有在安装阶段部署。

在 maven 程序集插件文档中:

When the assembly is created it will use the assemblyId as the artifact's classifier and will attach the created assembly to the project so that it will be uploaded into the repository in the install and deploy phase.

这不是 shaded 插件的情况。 如何配置 maven pom 以部署使用 shaded 插件创建的 uber jar?

你必须告诉 maven-shade-plugin to attach 可以通过以下方式完成的阴影工件:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2.2</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <shadedArtifactAttached>true</shadedArtifactAttached>
              <shadedClassifierName>jackofall</shadedClassifierName> <!-- Any name that makes sense -->
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>

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

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

使用 <shadedArtifactAttached>,我可以安装阴影 jar,但仅以 shadedClassifierName 为后缀,而非阴影 jar 出现在正常的工件名称下,导致依赖它的库选择将非阴影罐子放在阴影罐子上(在这种情况下这不是我想要的,因为我正在构建一个带有一些阴影依赖项的库)。