Муравей Знатоку - несколько целей сборки

У меня есть сборка Муравья, которая в настоящее время преобразовывается в Знатока. Однако сборка Муравья имеет 2 цели сборки - та, которая создает целое приложение и то, которое создает JAR из некоторых из тех файлов (только некоторые). У Муравья легко иметь несколько целей сборки для обработки этого, но я пытаюсь определить лучший способ обработать это в Знатоке.

Я мог разделить подмножество файлов во второй проект, и оно будет иметь своего собственного АНГЛИЧАНИНА. Затем первый проект мог зависеть от этого. Однако, так как подмножество файлов является настолько небольшим (меньше чем 10), кажется, что это могло бы быть излишество, чтобы иметь совершенно новый проект для этого.

Там другие пути состоят в том, чтобы обработать это?

52
задан informatik01 1 November 2013 в 16:23
поделиться

3 ответа

Ваша первая мысль является правильным. Разделите 2 штуки на 2 проекта.

Философия MAVEN заключается в том, что каждый проект должен построить один и только артефакт (банку, война, что угодно)

Вы могли бы, вероятно, взломать что-то вместе, так что у вас есть только один постройки проекта Maven, но было бы взломать Отказ

Вы можете позвонить мурасу от Maven, поэтому, если вы действительно хотите сделать это, то я предлагаю вам начать смотреть на плагин Maven Ant. Идентификатор артефакта - «Maven-Antrun-Plugin»

23
ответ дан 7 November 2019 в 09:19
поделиться

У вас есть 2 варианта:

Если подмножество - это только набор ресурсов, то я бы не сделал его отдельным модулем.

Если проект всегда зависит от подмножества, который упакован в равномерный способ, то подмножество является хорошим кандидатом, чтобы стать модулем .

Если подмножество переупаковано в нескольких различных «ароматах», то я бы определил сборки для каждого «аромата» и квалифицируйте имена артефактов с помощью координат Maven «классификатор» .

Наконец, вы можете использовать профили, чтобы определить, какие сборки выпускаются, ваш профиль по умолчанию может создать только начальный артефактный «ароматизатор», который требуется во время разработки.
«Полный» профиль может производить все варианты «аромата» артефакта для окончательного развертывания после завершения разработки.

5
ответ дан 7 November 2019 в 09:19
поделиться

Это можно сделать с помощью профилей....

Если вы действительно хотите использовать два отдельных профиля и настроить плагин 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>

Aside: Если это кажется много конфигураций, поддержка polyglot Maven для Groovy POM почти готова. Это значительно сократит обратный отсчет строки.

Вы поместите это в конец вашего pom.xml (с элементом проекта), и он добавит два профиля. Первый профиль "все" на самом деле только для того, чтобы продемонстрировать конфигурацию. Этот профиль "all" не нужен, потому что он просто дублирует поведение стандартного JAR-плагина, выполняющего задачу. Второй профиль "only-library" исключает любой класс в любом пакете, который начинается с текста "Main". Чтобы вызвать эти профили:

mvn package -Peverything
mvn package -Ponly-library

я протестировал это на примере приложения, которое поставляется с Глава 6 Maven by Example, и запуск одной из этих команд приведет к созданию JAR файла в ${basedir}/target, который имеет классификатор. Так как цель JAR-плагина привязана к фазе пакета в жизненном цикле maven по умолчанию, эти два профиля изменят конфигурацию для этого плагина.

Или вы можете сделать это с двумя исполнениями JAR-плагина...

Если вам нужно создать два JAR-плагина без использования профилей. Вы можете привязать цель 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 Assemblies. Если вы хотите узнать подробности о сборках, есть глава, перечисленная в конце этого ответа из Maven: Полная ссылка. Честно говоря, я не думаю, что эта конкретная глава является хорошей вводной ссылкой; на самом деле, у меня было множество сообщений о том, что эта глава почти не читается (и мы работаем над ее исправлением). Если вы хотите использовать сборки, я бы порекомендовал документацию Maven Assembly Plugin Maven Assembly Plugin's . В левом навигационном меню вы увидите список примеров дескрипторов сборки.

Отказ от ответственности: (Пожалуйста) не делайте этого. Если вы создаёте два разных JAR'а с двумя разными наборами классов, я настоятельно рекомендую разделить проект на два взаимозависимых модуля.

Хотя вы можете делать это с профилями, вам будет проще разделить проект на два (на самом деле три). В долгосрочной перспективе будут проблемы, с которыми вы столкнетесь по мере того, как ваши приложения будут масштабироваться. Вы будете отвечать за составление списка классов и пакетов, которые будут включены в каждый из ваших классифицированных JAR.

Существует минимальные накладные расходы, связанные с наличием простого родительского проекта, который ссылается на два отдельных модуля. Если вы посмотрите на бесплатную книгу Maven by Example book, мы покажем, как осуществить переход между одномодульным и многомодульным проектом. Главы 3-5 посвящены одномодульным проектам, а Глава 6 показывает, как можно объединить эти одномодульные компоненты в более крупный многомодульный проект.

Для получения дополнительной информации:

Ваш вопрос включает в себя следующие темы, вот несколько ссылок, которые предоставят более подробную информацию по каждой из них:

Плагин Maven JAR: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html

Мультимодульные проекты Maven: Глава 6 Maven на примере и Раздел 3.6.2 Maven: Полная ссылка .

Жизненный цикл Maven (баночка привязана к упаковке, если ваша упаковка "баночка"): Раздел 3.5.2 Maven на примере "Core Concepts" и Глава 4 Maven: Полная ссылка

Maven Assemblies: Сначала сайт Maven Assembly Plugin site, затем Глава 8 Maven: Полная ссылка на некоторые тяжелые (почти слишком тяжелые) детали.

75
ответ дан 7 November 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: