【问题标题】:Maven Inheritance and Distribution ManagementMaven继承和分发管理
【发布时间】:2017-07-06 20:32:51
【问题描述】:

我的开发人员在我的组织外部使用 Maven 父级。对于这种特殊情况,父级是 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>

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

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

我最终可能会管理数百个 POMS,我不想将每个 POMS 都放入其中,就好像我们必须移动内部 Maven 存储库一样,我将不得不管理数量可笑的项目来反映变化。

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

【问题讨论】:

  • 我不太明白你想要达到什么目的。您构建的工件应该转到工件存储库,例如 Nexus 或 Artifactory。通常,它们将由构建服务器部署到该存储库。您还可以代理 Nexus/Artifactory 中的外部存储库,以便在内部拥有所有使用过的父 pom 的副本。
  • 开发团队通常使用父 pom,它本质上定义了我们的超级 POM 版本。在这种情况下,开发团队使用的是 spring-boot-starter-parent 而不是“我们的”父级,因此不会继承与我们其他构建相同的东西。执行 Maven 发布:执行无法部署,因为找不到发布存储库(因为没有部署管理集)。我希望能够允许开发人员使用组织外部(即不属于)的父母,并且仍然能够将它们发布到我们的内部回购

标签: maven inheritance parent-pom


【解决方案1】:

保留您的组织父 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 在构建工件并部署到 Nexus(或其他 Maven 存储库管理器)之前

【讨论】:

  • pom 导入工作。我现在能够引入所有 spring-boot 依赖项并使用公司 POM 来详细说明 Artifactory 所在的位置。这不会只引入插件依赖项,但对于我的场景这是可以接受的。
猜你喜欢
  • 1970-01-01
  • 2012-09-23
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
相关资源
最近更新 更多