2017-02-17 33 views
2

我有开发人员在我的组织之外使用Maven父母。对于这种特殊的情况下,父亲是弹簧引导启动父Maven继承和分发管理

<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来完成这个工作,该Maven Parent定义了所有的项目并且没有其他的东西,所有的项目都作为它们的继承链的根源。

我最终可能会管理数百个POMS,而且我不想放在每个POM中,就好像我们必须移动内部Maven存储库一样,我将不得不管理一些荒谬的项目来反映更改。

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

+0

我真的不明白你想达到的目标。您构建的工件应该转到工件存储库,如Nexus或Artifactory。通常,它们将由构建服务器部署到该存储库。您也可以在Nexus/Artifactory中代理外部存储库,以便您拥有所有使用的父级poms的副本。 –

+0

开发团队通常使用基本上定义我们的超级POM版本的父pom。在这种情况下,开发团队使用的是spring-boot-starter-parent而不是“我们的”父项,因此它不会继承与我们其他版本相同的内容。执行Maven发行版:执行无法部署,因为无法找到版本库(因为没有deploymentManagement集)。我希望能够允许开发人员将外部父母(即不属于)的父母用于组织,并且仍然能够将他们发布到我们的内部回购中。 – shaunSCM

回答

0

保持你的组织父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回购经理)之前

+0

pom导入工作正常。 我现在能够引入所有的spring-boot依赖关系,并使用详细介绍Artifactory的公司POM。这不会在插件中引入依赖项,但对于我的场景来说这是可以接受的。 – shaunSCM