Создайте пользовательский жизненный цикл maven без создания плагина

#maven #lifecycle

#maven #жизненный цикл

Вопрос:

Мне нужно создать пользовательский жизненный цикл maven, и я хотел бы сделать это на том же pom.xml моего приложения. Возможно ли это? Вот соответствующий код, который у меня есть, и результаты, которые я получил:

<project_root>/src/main/resources/META-INF/plexus/components.xml:

 <?xml version='1.0'?>
<component-set>
  <components>
    <component>
      <role>org.apache.maven.lifecycle.Lifecycle</role>
      <role-hint>Configurator</role-hint>
      <implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
      <configuration>
        <id>Configurator</id>
        <phases>
          <phase>process-resources</phase>
          <phase>login</phase>
        </phases>
        <default-phases>
          <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
        </default-phases>
      </configuration>
    </component>
  </components>
</component-set>
  

<project_root>/src/main/resources/META-INF/maven/lifecycle.xml:

 <?xml version='1.0'?>
<lifecycles>
  <lifecycle>
    <id>Configurator</id>
    <phases>
      <phase>
        <id>process-resources</id>
      </phase>
      <phase>
        <id>configure</id>
      </phase>
    </phases>
  </lifecycle>
</lifecycles>
  

<project_root>/pom.xml:

 <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.luismmribeiro.config</groupId>
  <artifactId>Configurator</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>
</project>
  

Результат:

> настройка mvn

 [INFO] Scanning for projects...
[INFO]
[INFO] ---------------< org.luismmribeiro.config:Configurator >----------------
[INFO] Building Configurator 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.154 s
[INFO] Finished at: 2019-03-12T19:24:38Z
[INFO] ------------------------------------------------------------------------
[ERROR] Unknown lifecycle phase "configure". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/LifecyclePhaseNotFoundException
  

Комментарии:

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

2. Я бы спросил то же самое: зачем вам это нужно? Какова цель?

3. Я использую maven для замены некоторых заполнителей в некоторых файлах (в зависимости от сред) и, после этого, для выполнения 2 файлов sh. Фактически, я выбрал этот подход именно для того, чтобы быть простым: просто определите жизненный цикл с 3 фазами (по 1 цели на фазу) и выполните последнюю фазу. Чего бы я не хотел делать, так это быть вынужденным создавать плагин. Вот почему я хотел бы просто определить и выполнить этот жизненный цикл в одном pom.xml . И мой вопрос именно в этом: возможно ли это? Заранее спасибо.

Ответ №1:

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

Если они образуют отдельное действие, я бы написал плагин Maven.

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

Комментарии:

1. То, что я пытаюсь сделать, не имеет ничего общего с жизненным циклом компиляции Java. Это что-то другое. Вот почему я хочу создать новый жизненный цикл. Я могу создать его с помощью плагина, но я хотел бы иметь что-то простое и, по возможности, автономное в pom.xml файл.

2. Вы можете использовать плагин antrun и реализовать свое поведение в ant. Это будет содержаться в самом POM.

3. или у вас может быть три POM: по одному для плагина, проекта и корневого pom. Корневой pom имеет два других в качестве модулей, так что плагин может быть собран и использован за один сеанс

Ответ №2:

Я бы предложил перейти на gradle. Он предлагает почти все базовые функциональные возможности maven и позволяет создавать пользовательские задачи, написанные на groovy, в одном файле конфигурации.

Комментарии:

1. Gradle и Maven несопоставимы. Gradle — это отличная версия Ant. Maven предоставляет надежный набор шаблонов, которые побуждают разработчиков создавать код согласованным образом. Это означает, что разработчик, который знает Maven, может загрузить любой проект с maven и просто использовать его. По моему опыту, нет двух проектов Gradle, похожих так же, как проекты ant. С коммерческой точки зрения использование Maven имеет гораздо больше смысла с точки зрения планирования преемственности для разработчика программного обеспечения, чем любая из альтернатив.