Ответ 1
Нет никакого чистого способа сделать это, родительский модуль не имеет возможности узнать упаковку ребенка. (Нечистые решения включают создание плагина, который анализирует дочерний модуль pom и т.д.)
У меня есть POM, который объявляет материал веб-приложения, который является общим для моих проектов. Я использую это как родительский для всех веб-приложений.
Можно ли активировать профиль только в том случае, если упаковка является войной? Я пробовал подход к свойствам, но это не работает (поскольку это не свойство system/environment).
Поскольку это не удается построить, я могу просто отключить этот профиль при установке POM, но я бы хотел, чтобы он был более интеллектуальным сам по себе.
Вальтер
Нет никакого чистого способа сделать это, родительский модуль не имеет возможности узнать упаковку ребенка. (Нечистые решения включают создание плагина, который анализирует дочерний модуль pom и т.д.)
Вы можете просто проверить наличие src/main/webapp. Каждое веб-приложение, использующее стандартную раскладку каталога Maven, должно содержать эту папку. Поэтому вы избегаете ненужных фиктивных файлов.
<profile>
<id>custom-profile-eclipse-project-generation-webapp</id>
<activation>
<file>
<exists>${basedir}/src/main/webapp</exists>
</file>
</activation>
<build>
</build>
</profile>
Более точным вы также можете проверить наличие ${basedir}/src/main/webapp/WEB-INF/web.xml. Это должно окончательно определить военный проект.
Для себя я использую эту конфигурацию в своем общем супер-пом, чтобы настроить maven-eclipse-plugin для разных типов проектов. Это очень удобно для получения однородных конфигураций затмений над одним и тем же типом проекта в нашей организации, особенно когда разработчики просто запускают eclipse: eclipse в мультимодульных проектах.
Я знаю, что это не отвечает на ваш вопрос напрямую, но обычным обходным решением таких проблем является просто использование специализации (как и для классов).
Итак, у вас есть MasterPom со всем распространенным поведением.
MasterWarPom, который расширяет MasterPom (является ли он родительским) и предлагает здесь любую специализацию "упаковка - война".
Кроме того, у вас может быть MasterJarPom и т.д.
Таким образом, различия расщепляются красиво.
Лучшее, что мне удалось придумать для этих сценариев, было использование триггера активации на основе файлов. например, мой родительский pom имеет
<profile>
<id>maven-war-project</id>
<activation>
<file><!-- add a file named .maven-war-project-marker to webapp projects to activate this profile -->
<exists>${basedir}/.maven-war-project-marker</exists>
</file>
</activation>
<build>
<plugins>
<!-- configuration for webapp plugins here -->
</plugins>
</build>
и проекты webapp, которые наследуются от этого родителя, содержат файл с именем '.maven войны-проект-маркер' который активирует профиль
Это выглядит довольно тупо, но работает достаточно надежно, тогда как - использование активации является ненадежным, если другой человек или система выполняет сборку, - наследование от родителей, специфичных для типа, стало для меня немного громоздким, поскольку grandparent-pom изменяет версию относительно часто, поскольку она используется для определения "стандартных" или предпочтительных версий общих зависимостей, которые, в свою очередь, требуют соответствующих выпусков всех типов родители без изменений, кроме версии для бабушки и дедушки
Попробуйте таким образом?
mvn package -Dmaven.test.skip = true -Dwar
<project ×××××>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>××××</groupId>
<artifactId>×××××</artifactId>
<version>×××××</version>
<relativePath>../../</relativePath>
</parent>
<artifactId>×××××</artifactId>
<name>${project.artifactId}-${project.version}</name>
<description>${project.artifactId}-${project.version}</description>
<properties>
<packaging.type>jar</packaging.type>
</properties>
<profiles>
<profile>
<activation>
<property>
<name>war</name>
</property>
</activation>
<properties>
<packaging.type>war</packaging.type>
</properties>
<build>
<finalName>ROOT</finalName>
</build>
</profile>
</profiles>
<packaging>${packaging.type}</packaging>
<dependencies>
<dependency>
... ...
</dependency>
... ...
</dependencies>