Maven继承与分发管理

标签 maven inheritance parent-pom

我有开发人员在我的组织外部使用 Maven parents。对于这种特殊情况,父级是 spring-boot-starter-parent

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

他们的构建正在运行,并且他们已经针对这些依赖项进行了很长时间的测试,理想情况下我不想更改他们的继承。

作为发布工程师,我遇到的问题是生成的 Artifact 需要存储在内部 Maven 存储库中。过去,我们通过定义了一个 Maven Parent 来做到这一点,所有项目都将其作为其继承链的根。

我最终可能会管理数百个 POMS,但我不想把每个 POMS 都放进去,就好像我们必须移动内部 Maven 存储库一样,我将不得不管理大量荒谬的项目来反射(reflect)变化。

有什么方法可以设置我基本上没有对 parent 的写入权限?这可以在 MAVEN_OPTS 中设置或作为 CI 服务器上的属性文件吗?我尝试使用 properties-maven-plugin 输入我们所有的属性,但 distributionManagement 不会接受属性作为变量。

最佳答案

保留您的组织父 pom(除了您之前指定的 parent 元素)需要您将 Spring Boot 依赖项作为 bom:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>1.4.1.RELEASE</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

但我认为侵入性较小的方法可能是使用以下方法为您的模块设置正确的版本:

mvn versions:set 在构建 Artifact 并部署到 Nexus(或其他 Maven 存储库管理器)之前

关于Maven继承与分发管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42295836/

相关文章:

java - 克服 super 上的重复方法静态引用

卡程序中的 Java getter 和 setter 问题

mysql - 以 DRY 方式创建事件/存档模型 (Django)

java - 当继承版本时,如何以编程方式查找 Maven 依赖项的确切版本?

maven - 如何在命令行上排除 Maven 模块

JavaFX:位置未设置

java - 没有父pom.xml的spring-boot无法生成war打包

java - Maven部署插件不工作

java - 无法从 Maven 运行 testNG 测试

eclipse - Maven 多模块项目中的 Autowiring 依赖项