如何在不发布Maven的情况下指定要在Maven中构建的存储库

时间:2019-05-13 18:02:17

标签: maven

我有两个关系存储库。公司内的每个人都可以访问第一个(internal)。公司内的每个人都可以访问第二个(external),外部承包商可以访问其中的一部分。

我有一个父母pom.xml,我想在多个项目之间共享。这很简单,可以在poms中进行设置:

prj1 / pom.xml

<project>
  <parent>
     <groupId>com.example</groupId>
     <artifactId>global-parent</artifactId>
     <version>[1.0.2,1.1.0)</version>
     <!-- No relativePath -->
  </parent>
  ...
</project>

prj2 / pom.xml

<project>
  <parent>
     <groupId>com.example</groupId>
     <artifactId>global-parent</artifactId>
     <version>[1.0.2,1.1.0)</version>
     <!-- No relativePath -->
  </parent>
  ...
</project>

假设global-parent的相关版本位于我的.m2缓存中,此方法可以正常工作。如果不是,则构建失败,因为在Maven Central中搜索无法找到global-parent

显而易见的解决方案是在pom中添加<repository>元素:

prj1 / pom.xml

<project>
  <repositories>
    <repository>
      <id>internal</id>
      <url>https://internal.example.com/repository/maven-releases</url>
    </repository>
  </repositories>
  ...
</project>

可以,但是随后发布的pom包含对内部存储库的引用,这对仅有权访问外部存储库的承包商无效。

我可以创建两个配置文件(externalinternal)来指定相应的存储库,但是随后我必须始终使用mvn -P internal ...进行构建,这很烦人。

从长远来看,将有多个程序使用项目的不同子集。例如,程序Alpha可能需要prj1和prj2,而程序Beta可能需要prj1和prj3。

在这种情况下,https://internal.example.com/repository/maven-releases应该具有prj1,prj2和prj3,而https://external.example.com/repository/alpha-releases应该具有prj1和prj2,而https://external.example.com/repository/beta-releases应该具有prj1和prj3。

我以前的计划是创建部署配置文件,以便我可以在/prj1mvn deploy -P internalmvn deploy -P alphamvn deploy -P beta中获取内部的jar。存储库和适当的外部存储库。由于这与父pom中定义的配置文件一起使用,因此可以减少重复,并且不会引入无法访问的存储库。

我没有找到处理初始构建过程的好方法。

我确实对Nexus服务器具有合理的控制权,因此看起来像一台服务器镜像另一台服务器可能是正确的解决方案。这样的解决方案是可行的,尽管我现在还不清楚我应该部署到哪里以及应该对哪些内容进行镜像。

什么是解决此问题的好方法?

0 个答案:

没有答案