Расположение POM project.parent

Я использую Maven в проекте, который содержит несколько модулей. Когда мы выпускаем, мы развертываем модули в нашем собственном репозитории Maven. Модули проекта наследуются от родительского проекта, который определяет общие свойства, такие как используемые инструменты отчетности, местоположение SCM, репозитории и т. д.

./pom.xml

<project>
    <groupId>com.example</groupId>
    <artifactId>parent</artifactId>
    <version>1.0</version
    <repositories>
        <repository>
            <url>repo.example.com</url>
            ...
        </repository>
    </repositories>
    ...
</project>

./модуль/pom.xml

<project>
    <groupId>com.example</groupId>
    <artifactId>module</artifactId>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>parent</artifactId>
        <version>1.0</version>
    </parent>
    ...
</project>

Оказывается, с этой настройкой есть проблема: когда кто-то присоединяется к проекту и пытается собрать модуль, он терпит неудачу. Это связано с тем, что parent не будет доступен в их локальном репозитории Maven и не может быть извлечен, поскольку repo.example.com определен только в родительском POM.

Есть ли очевидный способ обойти эту проблему, запретив определение <repositories/> в POM каждого модуля?


person Armand    schedule 28.03.2011    source источник


Ответы (3)


В разделе parent добавьте элемент relativePath с содержимым ...

<parent>
    ...
    <relativePath>..</relativePath>
</parent>
person Jonathan    schedule 28.03.2011
comment
это, безусловно, должно работать, если родитель и его POM также были проверены. Это рекомендуется? - person Armand; 28.03.2011
comment
@Элисон, я использую его все время. Это не позволяет Maven проверять репозиторий, если относительный путь указывает на родительский POM с соответствующими координатами (вам все равно нужно указать groupId, ArtiftId и версию родителя). - person Jonathan; 29.03.2011

Вам следует рассмотреть возможность развертывания родительского pom.xml в вашем собственном репозитории Maven.

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

Это должно решить вашу проблему.

person Romain Linsolas    schedule 29.03.2011
comment
мы развернули родительский объект в нашем репозитории, но на наш репозиторий нет прямой ссылки в дочернем POM. - person Armand; 29.03.2011
comment
@Alison Ваш репозиторий может быть определен разработчиком settings.xml нет? - person Romain Linsolas; 30.03.2011
comment
да, хотя это еще одна часть конфигурации помимо проверки кода, которого я хотел бы избежать - person Armand; 30.03.2011

Относительный путь будет работать. Однако я предпочитаю устанавливать репозиторий в settings.xml

Проверка родителя, на мой взгляд, излишняя, и вы должны обновить проект, когда он изменится.

person Samuel EUSTACHI    schedule 12.04.2012