【问题标题】:Maven Shade Plugin: how 'mvn install' can include in the local repository the same jar generated through 'mvn package'?Maven Shade Plugin:“mvn install”如何在本地存储库中包含通过“mvn package”生成的相同 jar?
【发布时间】:2021-01-07 19:52:18
【问题描述】:

有以下情况:

  • STS
  • Java
  • 马文

一号机

工作区-01

带有 Maven 的 Java 应用基于一个单个模块。

通过应用程序的mvn packagemvn install 生成相应的jar。当然两者是相同的,但我们坚信最有效或最稳定的是通过本地存储库提供的。

现在通过mvn install 将jar 安装在本地存储库中,并使用脚本 并引用本地存储库可以在其他机器中找到并复制master-project.jar 文件,然后手动安装.为简单起见。

重点是:对于其他项目,那个依赖怎么可以放心使用

<dependency>
  <groupId>com.manuel.jordan</groupId>
  <artifactId>master-project</artifactId>
  <version>0.0.1.SNAPSHOT</version>
</dependency>

到这里一切正常

工作区-02

应用程序长大了,在其他工作区中,应用程序被迁移以使用多模块

为简单起见,我们假设以下结构

master-project (<packaging>pom</packaging>)
alpha (<packaging>jar</packaging>)
beta (<packaging>jar</packaging>)
numbers (<packaging>pom</packaging>)
   one (<packaging>jar</packaging>)
   two (<packaging>jar</packaging>)
countries (<packaging>pom</packaging>)
   Europe (<packaging>pom</packaging>)
      France (<packaging>jar</packaging>)
      Italy (<packaging>jar</packaging>)
   AmericaLatina (<packaging>pom</packaging>)
      Peru (<packaging>jar</packaging>)
      Argentina (<packaging>jar</packaging>)
uber-jar (<packaging>jar</packaging>) <--- it has a special purpose

我能够编译所有这些模块。因此构建成功

现在uber-jar模块有一个独特的目的,就是定义所有基于&lt;packaging&gt;jar&lt;/packaging&gt;类型的依赖,通过maven shade plugin生成超级jar。配置如下:

  <modelVersion>4.0.0</modelVersion>
  <packaging>jar</packaging>

  <artifactId>uber-jar</artifactId>
  <name>uber-jar</name>

  <parent>
    <groupId>com.manuel.jordan</groupId>
    <artifactId>master-project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <dependencies>
    <dependency>
        <groupId>com.manuel.jordan</groupId>
        <artifactId>alpha</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.manuel.jordan</groupId>
        <artifactId>beta</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    ....
    <dependency>
        <groupId>com.manuel.jordan</groupId>
        <artifactId>etc</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>${maven.shade.plugin.version}</version>
            <executions>
                <execution>
                    <id>create-fat-jar</id>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <finalName>master-project-0.0.1-SNAPSHOT</finalName>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
  </build>

使用上面显示的当前配置,如果在uber-jartarget 目录中执行mvn package,则会出现master-project-0.0.1-SNAPSHOT.jaruber-jar-0.0.1-SNAPSHOT.jar 文件。直到这里,关于前者,它的行为与单一模块方法/环境相同。

如果执行mvn install,我可以在本地存储库中看到每个模块都通过一个目录表示,其中每个&lt;packaging&gt;jar&lt;/packaging&gt; 类型都包含其各自的jar 文件。即使我去本地存储库中的uber-jar's 目录,它也会出现它自己的jar,就是这样。

关键是 script 现在失败了,因为本地存储库中不再存在 master-project-0.0.1-SNAPSHOT.jar。当然,我可以解决在uber-jartarget 目录中生成的那个。另一种方法是在另一个项目的uber-jar 模块中使用相同的一组依赖项,但它很冗长。

观察:该项目应该不知道依赖来自 single-modulemulti-module 项目。

机器二

以下必须在其他项目中保持平静

<dependency>
  <groupId>com.manuel.jordan</groupId>
  <artifactId>master-project</artifactId>
  <version>0.0.1.SNAPSHOT</version>
</dependency>

请求如果可能,如何编辑上面显示的 Maven Shade 插件配置。它的目的是将目标的 jar 包含到本地存储库中

唯一的解决方案是手动安装uber-jartarget 目录中的master-project-0.0.1-SNAPSHOT.jar 文件。但是很好奇我的请求能不能实现。

【问题讨论】:

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


    【解决方案1】:

    您可能已经注意到,&lt;finalName&gt; 仅更改了 target 中的工件名称。要更改本地仓库中的名称,您需要更改 POM 中的 Maven 坐标。

    更重要的是,不推荐从一个本地存储库复制到另一个存储库。相反,标准方法是使用 Nexus 或 Artifactory 服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 2023-03-03
      • 2013-05-12
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 2014-07-04
      相关资源
      最近更新 更多