дублированный maven groupId, artifactId и версии в подмодулях - PullRequest
15 голосов
/ 07 августа 2010

Мы оптимизируем нашу конфигурацию Maven (из ранее использовавшегося муравья), и я только что прочитал книгу Maven by Example от Sonatype.Дублирование конфигураций приводило нас к проблемам в прошлом, поэтому я абсолютно хочу избежать даже малейшего из этого.

В вышеприведенной книге упоминается использование встроенных свойств project.groupId и project.version изродительский модуль, когда ссылается на другие подмодули одного и того же уровня как на зависимости:

<dependency>
  <groupId>${project.groupId}</groupId>
  <artifactId>model</artifactId>
  <version>${project.version}</version>
</dependency>

Это прекрасно работает, мне это нравится.Но это не работает в теге подмодуля pom.xml:

<parent>
    <groupId>${project.groupId}</groupId>
    <artifactId>${project.artifactId}</artifactId>
    <version>${project.version}</version>
    <relativePath>../pom.xml</relativePath>
</parent>

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

ОБНОВЛЕНИЕ На данный момент лучший способ сделать это заключается в следующем.Немного некрасиво, но устраняет дубликаты жестко закодированных значений.parent pom.xml:

<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<packaging>pom</packaging>
<version>${version}</version>
<properties>
    <groupId>com.mycompany</groupId>
    <artifactId>mycompany</artifactId>
    <version>1.0</version>
</properties>

child pom.xml:

<parent>
    <groupId>${groupId}</groupId>
    <artifactId>${artifactId}</artifactId>
    <version>${version}</version>
    <relativePath>../pom.xml</relativePath>
</parent>
<artifactId>child</artifactId>

1 Ответ

3 голосов
/ 07 августа 2010

Это прекрасно работает, мне это нравится. Но это не работает в теге подмодуля pom.xml (...)

Это не может работать, проблема курицы и яйца: вы не можете получить координаты родителя для использования от родителя.

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

Ну, если предположить, что это сработает (и, насколько мне известно, свойства не расширены в родительском элементе, поэтому не будет), где эти свойства будут размещены? В родительском? Та же проблема, что и выше. У ребенка? Нет смысла. Короче говоря, вам нужно жестко закодировать эти значения в родительском элементе

Обратите внимание, что это не проблема для groupId и artifactId, так как они не меняются; однако для version это более раздражает, и я предлагаю либо использовать плагин Maven Release , либо Versions Maven Plugin (и его цель versions:update-child-modules ).

PS: Maven 3.1 будет поддерживать родительский элемент без версии (см. MNG-624 ).

Похожие ответы


Почему я не могу получить координаты родителя от родителя? Относительный путь должен дать мне доступ к родительскому пом. Так что на самом деле это работает, если вы добавляете groupId, artifactId и version как свойства в родительский элемент, а затем ссылаетесь на эти свойства для родительского элемента в дочернем элементе. Чтобы не было дублированных значений, соответствующие жестко закодированные элементы в родительском элементе также были заменены ссылками на свойства. Это выглядит ужасно, но это работает ...

Нет, он НЕ работает, подстановка свойства не разрешена в родительском элементе (для последующей воспроизводимости). Вот как это разработано в Maven 2.x. См. MNG-624 и миллионы потоков об этом в списке рассылки пользователей, например ::

Вы спросили о лучшей практике, я ответил: жестко закодируйте все в родительском элементе. Период.

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