Это можно сделать с помощью профилей ...
Если вы действительно хотите использовать два отдельных профиля и настроить плагин JAR для включения и исключения шаблонов имен классов и пакетов, вы можете легко сделать это, добавив что-то подобное в свой POM:
<profiles>
<profile>
<id>everything</id>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classifier>everything</classifier>
<includes>
<include>**/*</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>only-library</id>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classifier>only-library</classifier>
<excludes>
<exclude>**/Main*</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
В сторону: если это кажется слишком сложной конфигурацией, поддержка Polyglot Maven для Groovy POM почти готова. Это значительно сократит счетчик строк.
Вы должны поместить это в конец файла pom.xml (без элемента проекта), и он добавит два профиля. Первый профиль «все» на самом деле просто для демонстрации конфигурации. Этот профиль "все" является ненужным, потому что он просто дублирует поведение выполнения цели jar плагина JAR по умолчанию. Второй профиль «only-library» исключает любой класс в любом пакете, который начинается с текста «Main». Чтобы вызвать эти профили:
mvn package -Peverything
mvn package -Ponly-library
Я проверил это на примере приложения, поставляемого с Глава 6 Maven на примере , и при выполнении любой из этих команд будет получен файл JAR в $ {basedir} / target с классификатором. Поскольку цель jar плагина JAR связана с фазой пакета в жизненном цикле maven по умолчанию, эти два профиля будут изменять конфигурацию для этого плагина.
Или вы можете сделать это с помощью двух плагинов JAR ...
Если вам нужно создать два JAR-файла без использования профилей. Вы можете связать цель jar плагина JAR с фазой жизненного цикла пакета несколько раз и использовать разные конфигурации для каждого настроенного выполнения. Если вы конфигурируете два отдельных выполнения, каждое выполнение имеет блок конфигурации для конкретного выполнения, поэтому вы можете предоставить уникальный идентификатор и шаблон включения / исключения для каждого выполнения.
Вот элемент сборки, который вы бы использовали, чтобы добавить оба пользовательских JAR-файла в фазу жизненного цикла «package». Выполнение этого в проекте с упаковкой «jar» приведет к тому, что цель jar будет выполнена три раза. Один раз в качестве привязки жизненного цикла по умолчанию, а затем дважды для двух пользовательских классифицированных JAR-файлов.
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>only-library</id>
<goals><goal>jar</goal></goals>
<phase>package</phase>
<configuration>
<classifier>only-library</classifier>
<excludes>
<exclude>**/Main*</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>everything</id>
<goals><goal>jar</goal></goals>
<phase>package</phase>
<configuration>
<classifier>everything</classifier>
<includes>
<include>**/*</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Если вы не говорите о включении разных наборов классов в каждый артефакт, вам следует использовать сборки Maven. Если вы хотите узнать подробности сборок, в конце этого ответа от Maven приведена глава: Полная справка. Честно говоря, я не думаю, что эта конкретная глава является хорошей вводной ссылкой; На самом деле, у меня было много сообщений о том, что эта глава почти не читается (и мы работаем над этим). Если вы хотите использовать сборки, я бы порекомендовал документацию Maven Assembly Plugin . В левом навигационном меню вы увидите список примеров дескрипторов сборки.
Отказ от ответственности: (Пожалуйста) не делайте этого. Если вы создаете два разных JAR-файла с двумя разными наборами классов, я настоятельно рекомендую разбить проект на два взаимозависимых модуля.
Хотя вы можете сделать это с помощью профилей, вам будет легче разделить проект на два (на самом деле три). В долгосрочной перспективе будут проблемы, с которыми вы будете сталкиваться по мере масштабирования вашего приложения. Вы будете нести ответственность за составление этого ручного списка классов и пакетов, которые будут включены в каждый из ваших классифицированных JAR-файлов.
Существуют минимальные накладные расходы на создание простого родительского проекта, который ссылается на два отдельных модуля. Если вы посмотрите на бесплатную книгу Maven by Example, мы покажем, как осуществить переход между одномодульным и многомодульным проектом. Главы 3-5 посвящены проектам с одним модулем, а Глава 6 показывает, как можно объединить эти компоненты с одним модулем в большой многомодульный проект.
Для получения дополнительной информации:
Ваш вопрос включает в себя следующие темы, вот несколько ссылок, которые предоставят более подробную информацию для каждой из них:
Плагин Maven JAR: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
Мультимодульные проекты Maven: Глава 6 Maven на примере и Раздел 3.6.2 Maven: Полная справка .
Жизненный цикл Maven (jar связан с упаковкой, если ваш пакет - "jar"): Раздел 3.5.2 Maven на примере "Основные понятия" и Глава4 из Maven: полный справочник
сборок Maven: сначала сайт Плагин сборки Maven , затем глава 8 Maven: полный справочник для некоторыхтяжелые (почти слишком тяжелые) детали.