Если вам нравится использовать мультимодули в maven, вы должны следовать некоторым рекомендациям, что означает, во-первых, чтобы родитель был в вашей структуре, а не снаружи.Это означает:
project-foo
+- pom.xml (This is your parent for the module-1 etc.)
+- module-1
| +- pom.xml
| +- ...
+- module-2
| +- pom.xml
| +- ...
+- ...
Что можно отклониться от этого, это создать новую папку:
project-foo
+- pom.xml
+- project-parent (pom.xml)
+- module-1
| +- pom.xml
| +- ...
+- module-2
| +- pom.xml
| +- ...
+- ...
Но чем вы должны определить родителя, немного странного для module-1:
<parent>
<groupId>..</groupId>
<artifactId>..<artifactId>
<version>..</version>
<relativePath>../project-parent/<relativePath>
</parent>
, который я бы не рекомендовал, потому что он производит больше конфигурации, чем необходимо ...
Если вы используете "default", что является наилучшей практикой:
project-foo
+- pom.xml (This is your parent for the module-1 etc.)
+- module-1
| +- pom.xml
| +- ...
+- module-2
| +- pom.xml
| +- ...
+- ...
в вашем модуле-1 это выглядит следующим образом:
<parent>
<groupId>..</groupId>
<artifactId>..<artifactId>
<version>..</version>
</parent>
и у вашего родителя (в данном случае).
project-foo
+- pom.xml (This is your parent for the module-1 etc.)
вы должны определитьМодули, которые вы используете:
<modules>
<module>module-1</module>
<module>module-2</module>
..
</modules>
Кроме того, вы должны также определить ваши зависимости и pluginManagement в этом pom.
Если вы хотите иметь полный отдельный родительский pom, вы должны определитьотдельный проект, который содержит pom плюс конфигурацию scm только для этого pom и делает реальный выпуск этого pom (как артефакт jar, за исключением того, что это pom) и, конечно, версию, которую вы можете использовать в своем проекте в качестве родительского.
Подходит кточка области SCM: Единственное место для такого рода информации в многомодульной сборке находится в проекте -foo / pom.xml:
project-foo
+- pom.xml (This is your parent for the module-1 etc.)
. Больше нигде не будет определения SCM вмодули!Более того, никогда не используйте свойства для определения области scm, просто используйте нужную информацию:
scm: svn: scm: svn: http: /// project / trunk / scm: svn: http: /// project/ trunk / scm: svn: http: /// project / trunk /
Если вы беспокоитесь о проблеме с помощью веток и т. д., вы можете решить эту проблему с помощью maven-release-plugin что дает вам возможность создать ветку с помощью:
mvn release:branch
Исходя из этого и в процессе выпуска, URL для области SCM будет соответствующим образом изменен.Поэтому вам не нужно беспокоиться о них (никогда не используйте свойства для них, потому что они не будут работать!)
Вам также необходимо настроить область distributionManagement, чтобы определить, куда поместить SNAPSHOT и выпущенную версию вашей версии.артефакты (надеюсь, вы используете менеджер репозитория, такой как Nexus, Artifactory или Archiva?).
Я могу порекомендовать прочитать Sonatype Book для многомодульных сборок и т. д.