Пользовательское имя pom.xml filename в maven multimodule
У меня есть проект maven3 multimodule, и по какой-то странной причине мне нужно настроить имя файла POM для одного из моего дочернего модуля (то есть: module-pom.xml)
Можно ли настроить это в родительском pom?
Странная причина - немного объяснить объяснение, но у вас будет простой контекст.
Контекст
-
Я работаю над проектом с закрытым исходным кодом, который также использует проекты LGPLed. этот проект называется main
-
Я хочу, чтобы main
объявлял модули всех проектов, закрытых и открытых. Полная сборка должна быть выполнена с помощью уникальной команды mvn clean package
.
-
Внутри проекта реактора main
у меня есть проект lgpl-reactor
с несколькими модулями, содержащий 3 модуля LGPL (API, Plugins и Distribution). У некоторых разработчиков будет доступ только к lgpl-reactor
, поэтому я также хочу, чтобы этот проект строился из своей папки с помощью команды mvn clean package
, как полностью автономный проект.
-
У меня также есть проект main-dist
, который является проектом только для maven-assembly-plugin (для создания дистрибутива).
Проблема
-
Если я добавляю родительскую ссылку на lgpl-reactor
pom.xml, глобальная сборка main
работает отлично, а сборка, созданная main-dist
, действительна, но автономная сборка lgpl-реактора терпит неудачу (основной pom.xml не найден).
-
Если я удаляю родительскую ссылку из lgpl-reactor
pom.xml, выполняется автономная компоновка lgpl-reactor
, но сборка, созданная main-dist
, НЕ является допустимой (отсутствует.
Как это решить?
-
используйте другой модуль модуля POM-pom.xml для объявления lgpl-reactor
модуля внутри списка объявлений модулей main
. При выполнении полной сборки из проекта main
module-pom.xml
содержит ссылку на родительский POM и работает правильно.
-
используйте стандартный файл POM pom.xml для автономной сборки lgpl-reactor
. Этот POM вряд ли может ссылаться на родительский pom с свойством relativePath
тега <parent>
Но КАК я могу это сделать? если возможно? Или есть ли лучшее решение?
Справочник проекта основного реактора
lgpl-lib [LGPL Library]
lgpl-ext [LGPL Reactor Project]
closed-core [Closed source module]
closed-spring [Closed source module]
closed-web [Closed source module]
closed-webserver [Closed source module]
main-dist [Main assembly module]
pom.xml [Main Reactor POM]
Справочник проекта LGPL Reactor
lgpl-api [LGPL API module]
lgpl-plugins [LGPL Plugins module]
lgpl-ext-dist [LGPL assembly module]
main-pom.xml [Main Reactor POM, copy of main pom.xml]
pom.xml [Standalone LGPL Reactor POM]
module-pom.xml [Module LGPL Reactor POM]
Основной реактор POM (pom.xml и lgpl-reactor/main-pom.xml)
...
<modelVersion>4.0.0</modelVersion>
<groupId>main.group</groupId>
<artifactId>main</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Main</name>
<packaging>pom</packaging>
...
<modules>
<module>closed-core</module>
<module>closed-web</module>
<module>closed-webserver</module>
<module>closed-spring</module>
<module>lgpl-reactor</module>
<module>lgpl-lib</module>
<module>main-dist</module>
</modules>
...
LGPL реактор /pom.xml
...
<modelVersion>4.0.0</modelVersion>
<artifactId>lgpl-reactor</artifactId>
<name>LGPL Reactor</name>
<packaging>pom</packaging>
<parent>
<groupId>main.group</groupId>
<artifactId>main</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>main-pom.xml</relativePath>
</parent>
...
...
<modules>
<module>lgpl-api</module>
<module>lgpl-plugins</module>
<module>lgpl-ext-dist</module>
</modules>
...
pom.xml main-dist
<project>
<parent>
<groupId>main.group</groupId>
<artifactId>main</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>main-dist</artifactId>
<packaging>pom</packaging>
<description>Main Distribution</description>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>plugins-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>closed</groupId>
<artifactId>closed-webserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>closed</groupId>
<artifactId>closed-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
assembly.xml main-dist
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>plugins-assembly</id>
<formats>
<format>dir</format>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>../closed-webserver/conf</directory>
<outputDirectory>conf</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<excludes><exclude>main.group:closed-webserver</exclude></excludes>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>main.group:closed-webserver</include>
</includes>
<binaries>
<outputFileNameMapping>${module.artifactId}${dashClassifier?}.${module.extension}</outputFileNameMapping>
<unpack>false</unpack>
<includeDependencies>false</includeDependencies>
</binaries>
</moduleSet>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>main.group:closed-spring</include>
</includes>
<binaries>
<outputFileNameMapping>${module.artifactId}${dashClassifier?}.${module.extension}</outputFileNameMapping>
<unpack>false</unpack>
<includeDependencies>false</includeDependencies>
</binaries>
</moduleSet>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>main.group:lgpl-ext-dist</include>
</includes>
<binaries>
<outputDirectory>plugins</outputDirectory>
<unpack>false</unpack>
<includeDependencies>true</includeDependencies>
</binaries>
</moduleSet>
</moduleSets>
</assembly>
Ответы
Ответ 1
Я бы предложил изменить структуру папок следующим образом.
root (pom.xml)
+-- closed-core
+-- closed-web
+-- closed-webserver
+-- closed-spring
+-- lgpl-reactor
+-- lgpl-lib
+-- lgpl-dist
+-- lgpl-etc..
Чем вам не нужен файл separte module-pom.xml. Вы можете работать с pom.xml по умолчанию.
Если вы не собираетесь создавать lgpl -рею, вы можете просто дать:
mvn -pl lgpl-reactory clean package
Если у вас есть зависимости в других модулях для lgpl, вы можете использовать:
mvn -am -pl lgpl-reactory clean package
Это создаст также все зависимые модули.
Ответ 2
Вы можете переопределить pom.xml по умолчанию. У Maven есть опция -f.
mvn -f <path>/pom.xml clean install
Ответ 3
Решение - применить обратную логику и использовать "mvn -f standalone-pom.xml clean package" для создания lgpl-реактора в качестве автономного проекта... Но будет лучше, если автономный проект будет построен с стандартная командная строка maven2.