Как указать репозиторий для сборки в Maven без его публикации - PullRequest
0 голосов
/ 13 мая 2019

У меня есть два хранилища Nexus.Первый (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.

Очевидное решение - добавить элемент <repository> в pom:

prj1 / pom.xml

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

Это работает, но опубликованный pom содержит ссылку на внутренний репозиторий, который не будет работать для подрядчиков, имеющих доступ только к внешнему репозиторию.

Я мог бы создать два профиля (external и internal), которые указывают соответствующий репозиторий, но тогда я должен всегда строить с 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.

Мой предыдущий план заключался в создании профилей развертывания, чтобы я мог (в /prj1) mvn deploy -P internal, mvn deploy -P alpha и mvn deploy -P beta получитьбанки на внутреннем хранилище и соответствующие внешние.Поскольку это работает с профилями, определенными в родительском pom, это является минимальным дублированием и не приводит к недоступности репозиториев.

Мне не удается найти хороший способ обработки начального процесса сборки.

У меня есть разумный контроль над серверами Nexus, поэтому кажется, что что-то вроде зеркального отображения одного сервера, другого - правильное решение.Такое решение выполнимо, хотя мне не сразу понятно, куда мне следует развернуться и что нужно отразить.

Какой хороший способ решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...