Управление версиями Maven POM для нескольких проектов Maven - PullRequest
1 голос
/ 11 декабря 2011

В наших проектах у нас есть около 25 maven проектов, каждый из которых содержит как минимум 3 модульных проекта и один родительский POM. Таким образом, всего около (25 * 4) 100 файлов POM. Есть ли простой способ сохранить версию смены POM? Так что эта задача стала утомительной и скучной задачей. Это должно быть общей проблемой при разработке программного обеспечения?

У кого-нибудь есть сценарии или инструменты для изменения этой версии для обработки следующих 3 случаев?

1)  
    <dependency>
      <groupId>THEGROUPID</groupId>
      <artifactId>THEARTIFACT</artifactId>
      <version>THE-VERSION</version>
    </dependency>

2)
    <dependency>
      <groupId>THEGROUPID</groupId>
      <artifactId>THEARTIFACT</artifactId>
      <version>$(version.number)</version>
    </dependency>
3)
  <parent>
    <groupId>THEGROUPID</groupId>
    <artifactId>THEARTIFACT</artifactId>
    <version>THE-VERSION</version>
  </parent>

У нас есть 25 проектов maven, и у каждого из них есть зависимость друг от друга (через родительский pom, но не циклическую зависимость). Поэтому, когда мы меняем версию одной из библиотек, ее нужно менять во всех POM-модулях родительского модуля maven ..... Следовательно, я искал инструмент, который мог бы достичь этого в течение всего POM-а, а не только одного мути. -модульный проект (плагин релиза только релиз и ОДИН maven muti-module project.) Я надеюсь, что это поможет лучше понять проблему ..

В основном, я ищу команду типа SED Linux, но для определенного groupid и artifactid.

Спасибо

Bmis13

Ответы [ 3 ]

5 голосов
/ 12 декабря 2011

Поместите все версии в <dependencyManagement> в вашем родительском пом:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>THEGROUPID</groupId>
      <artifactId>THEARTIFACT</artifactId>
      <version>THE-VERSION</version>
    </dependency>
  </dependencies>
</dependencyManagement>

Таким образом, вам не нужно добавлять тег <version> в ваши дочерние помпы.

Ref: dependencyManagement (прокрутить вниз)

1 голос
/ 07 ноября 2012

Используйте versions-maven-plugin со своим set mojo:

cd <your-super-parent-pom>
mvn versions:set -DoldVersion=1-SNAPSHOT -DnewVersion=2-SNAPSHOT

Этот плагин, однако, имеет некоторые ограничения. Он не справляется с определенными (сложными) структурами, где наследование pom является сложным, и я также не уверен, обрабатывает ли он ссылки на свойства.

Внутри maven-release-plugin есть аналогичная функциональность. У него может быть чуть более высокий шанс работать лучше, поскольку он используется чаще - и AFAIK код не передается - но у меня нет прямого опыта с этим. Я только что наблюдал много выпусков с правильной нумерацией версий в довольно сложных сценариях ...

0 голосов
/ 22 сентября 2012

Я написал свой собственный инструмент для этого. Он называется «pommel», и вы можете получить его здесь:

http://code.google.com/p/pommel/

Вы определяете файл сопоставления и запускаете его из командной строки, т.е.

java -jar pommel-1.0.0.jar -iC:\Development\java\projects -mmapping.xml

Файл сопоставления имеет вид:

<?xml version="1.0"?>
<mappings>
  <mapping>
    <dependency-source>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>*</version>
    </dependency-source>
    <dependency-target>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.9</version>
        <scope>test</scope>
    </dependency-target>
  </mapping>

</mappings>

Это заменит все ссылки на junit с указанным целевым объектом зависимости. Не вы можете использовать подстановочный знак в определении источника зависимости. Он будет применять сопоставление ко ВСЕМ файлам pom, найденным в указанном каталоге.

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