Недавно я перенес свое приложение на основе платформы NetBeans (NBP) с Ant на Maven. Я в значительной степени понял Maven, но есть одна вещь, которую я до сих пор не могу понять, и это система/конвенция версий.
Кажется, что все в мире Maven с большим проектом Maven, состоящим из нескольких модулей, используют родительский pom, в котором они определяют версию, которая затем наследуется всеми дочерними pom (т. е. всеми модулями NBP в проекте Maven NetBeans RCP).
Например, взгляните на окончательный результат примера проекта в книге maven: http://books.sonatype.com/mvnex-book/reference/optimizing-sect-final-poms.html
Вы увидите одну версию, определенную родительским POM,
<groupId>org.sonatype.mavenbook.optimize</groupId>
<artifactId>simple-parent</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
который наследуется каждым дочерним модулем, путем указания родителя и без использования собственного тега:
<parent>
<groupId>org.sonatype.mavenbook.optimize</groupId>
<artifactId>simple-parent</artifactId>
<version>1.0</version>
</parent>
и для своих внутренних (в рамках проекта) зависимостей каждый дочерний модуль определяет это относительно проекта:
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>simple-weather</artifactId>
<version>${project.version}</version>
</dependency>
Это означает, что вы не можете обновить один модуль до более высокой версии, потому что тогда он будет искать зависимости с тем же номером версии, которых не существует. Не говоря уже о том, что использование отдельной версии для любого из ваших дочерних модулей доставляет вам головную боль при использовании плагина version-maven-plugin, потому что вы в конечном итоге управляете своими зависимостями на микроуровне.
Кажется, это полностью противоречит философии AutoUpdate/Lifecycle/Release платформы NetBeans. Там я мог обновить один модуль и сгенерировать новый файл update.xml («Пакет как NBM»), и при загрузке в репозиторий AutoUpdate клиент увидит только это обновление. Кажется, что если вы сделаете это способом Maven (mvn nbm:autoupdate
), все модули получат повышение версии, так что вся модель автоматического обновления через модули пойдет насмарку.
Я надеюсь, что ошибаюсь, и где-то есть функция восстановления отличной функциональности автоматического обновления, которая поставляется с платформой, какой-то дополнительный номер версии, который автоматически добавляется к номеру major.minor.revision, или какой-то разумный способ переопределить OpenIDE-Module-Specification-Version = major.minor.revision
между ними. выпускает версии. Должен ли я выпускать новую версию моего приложения для каждого крошечного обновления клиентского модуля?