Даден е следният примерен многомодулен проект:
- aggr/pom.xml (Версия 1.0-МОМЕНТНА СНИМКА)
- aggr/parent/pom.xml (Версия 2.0-МОМЕНТНА СНИМКА)
- aggr/app/pom.xml (Версия 3.0-МОМЕНТНА СНИМКА)
- aggr/comp1/pom.xml (Версия 4.0-МОМЕНТНА СНИМКА)
където родителят е родителят на всеки друг pom и приложението има зависимост от comp1.
Освобождаването чрез release:prepare/perform просто работи добре, докато папката aggr има същата структура в svn хранилището (repository/trunk/aggr/parent.pom, ...).
Сега, когато искам да използвам същия проект, но със svn:externals, приставката за освобождаване не работи, заявявайки, че comp1:
Can't release project due to non released dependencies : parent:pom:2.0-SNAPSHOT
Тогава структурата на хранилището е нещо подобно
- хранилище/aggr/trunk/pom.xml
- repository/parent/trunk/pom.xml
- repository/app/trunk/pom.xml
- repository/comp1/trunk/pom.xml
папката aggr използва външни елементи, сочещи към модулните стволове и следователно извлеченото работно копие изглежда като горното.
Защо Maven обработва модули, базирани на външни елементи, по различен начин и има ли начин това да се преодолее?
Редактиране: pom-файловете на проекта svn:externals. Единствената разлика с pom-файловете на другия проект са scm таговете. В другия проект, който не е външен, само агрегаторът има етикет scm.
Външен родител-pom.xml
<groupId>small.test</groupId>
<artifactId>parent</artifactId>
<version>2.0-SNAPSHOT</version>
<scm>
<connection>scm:svn:http://localhost/svn/small-test-ext/parent/trunk/</connection>
<developerConnection>scm:svn:http://localhost/svn/small-test-ext/parent/trunk/</developerConnection>
<url>http://localhost/svn/small-test-ext/parent/trunk/</url>
</scm>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.1</version>
</plugin>
</plugins>
Външен aggr-pom.xml small.test родител 2.0-МОМЕНТНА СНИМКА
<groupId>small.test</groupId>
<artifactId>aggr</artifactId>
<version>1.0-SNAPSHOT</version>
<scm>
<connection>scm:svn:http://localhost/svn/small-test-ext/aggr/trunk/</connection>
<developerConnection>scm:svn:http://localhost/svn/small-test-ext/aggr/trunk/</developerConnection>
<url>http://localhost/svn/small-test-ext/aggr/trunk/</url>
</scm>
<modules>
<module>parent</module>
<module>comp1</module>
<module>comp2</module>
<module>app</module>
</modules>
Външен app-pom.xml
<parent>
<groupId>small.test</groupId>
<artifactId>parent</artifactId>
<version>2.0-SNAPSHOT</version>
</parent>
<groupId>small.test</groupId>
<version>3.0-SNAPSHOT</version>
<artifactId>app</artifactId>
<packaging>jar</packaging>
<scm>
<connection>scm:svn:http://localhost/svn/small-test-ext/app/trunk/</connection>
<developerConnection>scm:svn:http://localhost/svn/small-test-ext/app/trunk/</developerConnection>
<url>http://localhost/svn/small-test-ext/app/trunk/</url>
</scm>
<dependencies>
<dependency>
<groupId>small.test</groupId>
<artifactId>comp1</artifactId>
<version>4.0-SNAPSHOT</version>
</dependency>
Thanks Konrad