У меня есть два хранилища 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, поэтому кажется, что что-то вроде зеркального отображения одного сервера, другого - правильное решение.Такое решение выполнимо, хотя мне не сразу понятно, куда мне следует развернуться и что нужно отразить.
Какой хороший способ решить эту проблему?