繁体   English   中英

使用已发布的工件时,Maven 依赖关系解析如何工作?

[英]How does Maven dependency resolution work when using released artifacts?

我有一个多模块 Maven 项目,如下所示:

  • 反应堆 -> 输入 pom
    • 全部 -> 类型 zip
    • 脚本 -> 输入 zip
    • 资源 -> 输入 zip
    • 前端 -> 输入 pom
    • JarFile -> 输入 jar

最终,当我发布 package 时,这个库的使用者应该需要的唯一依赖项是:

  • 全部(在构建时嵌入脚本、资源、JarFile 和前端的文件)
  • JarFile(如果他们想针对此 Jar 中定义的公共 Java API 进行开发,将使用它)

我注意到如果我只部署 All 和 JarFile,并且只将这两个依赖项添加到消费项目并构建我的消费项目,我会收到 maven 构建错误,提示找不到脚本、资源和前端(因为它们被 All 引用绒毛)

  1. 直接使用 All 工件时(在其构建状态下),为什么 Maven 关心它是否无法解决所有 pom 的依赖项? 这些应该是 All 项目的实施细节吗?
  2. 有什么方法可以配置发布,以便我只需要发布 All zip 和 JarFile jar 工件? 而不是这些“实现细节”工件?

Q1:当直接使用 All 工件时(在其构建状态下),为什么 Maven 关心它是否无法解决所有 pom 的依赖项? 这些应该是 All 项目的实施细节吗?

Maven 3通过设计传递地解决依赖关系。

Q2:有什么方法可以配置发布,这样我只需要发布 All zip 和 JarFile jar 工件吗? 而不是这些“实现细节”工件?

是的,您可以使用flatten-maven-plugin使用使用页面上描述的配置发布之前扁平化 POM:

  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>flatten-maven-plugin</artifactId>
        <!--<version>1.2.2</version>-->
        <configuration>
          <flattenMode>minimum</flattenMode>
        </configuration>
        <executions>
          <!-- enable flattening -->
          <execution>
            <id>flatten</id>
            <phase>process-resources</phase>
            <goals>
              <goal>flatten</goal>
            </goals>
          </execution>
          <!-- ensure proper cleanup -->
          <execution>
            <id>flatten.clean</id>
            <phase>clean</phase>
            <goals>
              <goal>clean</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM