使用已发布的工件时,Maven 依赖项解析如何工作?
Posted
技术标签:
【中文标题】使用已发布的工件时,Maven 依赖项解析如何工作?【英文标题】:How does Maven dependency resolution work when using released artifacts? 【发布时间】:2021-04-06 15:07:15 【问题描述】:我有一个多模块 Maven 项目,如下所示:
反应器 -> 类型 pom 全部 -> 输入 zip 脚本 -> 输入 zip 资源 -> 输入 zip 前端 -> 输入 pom JarFile -> 输入 jar最终,当我将它打包发布时,这个库的使用者应该需要的唯一依赖项是:
全部(在构建时嵌入脚本、资源、JarFile 和前端的文件) JarFile(如果他们想针对此 Jar 中定义的公共 Java API 进行开发,将使用它)我注意到,如果我只部署 All 和 JarFile,并且只将这两个依赖项添加到消费项目并构建我的消费项目,我会收到 maven 构建错误,提示找不到脚本、资源和前端(因为它们被引用由所有人的pom)
-
当直接使用 All 工件时(在其构建状态下),为什么 Maven 会关心它是否无法解析 All pom 的依赖项?这些应该是 All 项目的实施细节吗?
有什么方法可以配置发布,这样我只需要发布所有 zip 和 JarFile jar 工件吗?而不是这些“实现细节”工件?
【问题讨论】:
【参考方案1】:Q1:直接使用 All 工件时(在其构建状态下),为什么 Maven 会关心它是否无法解析 All pom 的依赖项?这些应该是 All 项目的实施细节吗?
Maven 3 解决依赖关系 transitively 按设计。
Q2:有什么方法可以配置发布,这样我只需要发布所有 zip 和 JarFile jar 工件吗?而不是这些“实现细节”工件?
是的,您可以使用flatten-maven-plugin
在发布之前使用usage 页面上描述的配置来展平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>
【讨论】:
以上是关于使用已发布的工件时,Maven 依赖项解析如何工作?的主要内容,如果未能解决你的问题,请参考以下文章
maven警告:使用同一工件的两种不同类型的依赖项时重复版本