问题描述
- Reactor -> 类型 pom
- 全部 -> 输入 zip
- 脚本 -> 输入 zip
- 资源 -> 输入 zip
- 前端 -> 输入 pom
- JarFile -> 输入 jar
最终当我打包发布时,这个库的使用者唯一需要的依赖是:
我注意到如果我只部署 All 和 JarFile,并且只将这两个依赖项添加到消费项目并构建我的消费项目,我会收到 maven 构建错误,说找不到脚本、资源和前端(因为它们被引用由 All 的 pom)
- 当直接使用 All 工件(在其构建状态)时,为什么 Maven 会关心它是否无法解析 All pom 的依赖项?这些应该是 All 项目的实施细节吗?
- 有什么方法可以配置发布,以便我只需要发布所有 zip 和 JarFile jar 工件?而不是这些“实现细节”工件?
解决方法
问题 1: 当直接使用 All 工件(在其构建状态)时,为什么 Maven 会关心它是否无法解析 All pom 的依赖项?这些应该是 All 项目的实现细节吗?
Maven 3 解析依赖关系transitively 按设计。
问题 2: 有什么方法可以配置发布,以便我只需要发布 All 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>