Плагин Maven mojo, как определить фазы, которые должны быть запущены до этой цели?

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

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

  <build>
    <plugins>
      <plugin>
        <groupId>sample.plugin</groupId>
        <artifactId>maven-hello-plugin</artifactId>
        <version>1.0-SNAPSHOT</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>sayhi</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

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


person lisak    schedule 14.10.2010    source источник


Ответы (2)


Плагин Maven Mojo, как определить фазы, которые должны быть запущены до этой цели?

Вы не можете.

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

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

Вот пример, демонстрирующий это поведение с подключаемым модулем Maven AntRun, настроенным следующим образом:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
      <execution>
        <phase>package</phase>
        <configuration>
          <target>
            <echo message="Hi!!!!!"/>
          </target>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

И вывод mvn package:

$ mvn package
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Q3934833 Maven Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ Q3934833 ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.5:test (default-test) @ Q3934833 ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-war-plugin:2.1:war (default-war) @ Q3934833 ---
[INFO] Packaging webapp
[INFO] Assembling webapp [Q3934833] in [/home/pascal/Projects/stackoverflow/Q3934833/target/Q3934833]
[INFO] Processing war project
[INFO] Copying webapp resources [/home/pascal/Projects/stackoverflow/Q3934833/src/main/webapp]
[INFO] Webapp assembled in [317 msecs]
[INFO] Building war: /home/pascal/Projects/stackoverflow/Q3934833/target/Q3934833.war
[INFO] WEB-INF/web.xml already added, skipping
[INFO] 
[INFO] --- maven-antrun-plugin:1.6:run (default) @ Q3934833 ---
[INFO] Executing tasks

main:
     [echo] Hi!!!!!
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...

Плагин antrun выполняется после package, как и ожидалось.

person Pascal Thivent    schedule 14.10.2010
comment
Я пробовал так, и война не была создана. Я попробовал именно так, как в примере, который я вставил, и у меня война не существует - person lisak; 14.10.2010
comment
Это работает на этапе установки, но не с пакетом... но этот обходной путь не будет хорошим, потому что мне придется всегда устанавливать артефакт перед развертыванием. - person lisak; 14.10.2010
comment
@lisak Это просто работает, как рекламируется. Если вы получаете другое поведение, покажите свою конфигурацию и вывод, демонстрирующий проблему. - person Pascal Thivent; 14.10.2010
comment
Извините, наверное, мне пора спать :-) Я запускал mvn myGoal:myPhase вместо mvn package... так что все в порядке, спасибо - person lisak; 14.10.2010
comment
@lisak Нет проблем, рад, что мы разобрались. - person Pascal Thivent; 14.10.2010
comment
Вы можете сократить Конфигурацию, удалив <phase> и установив defaultPhase в @Mojo-аннотации. - person Grim; 16.12.2016

Вы можете попробовать использовать фазу PREPARE_PACKAGE в своей аннотации @Mojo:

@Mojo(name = "myName", defaultPhase = LifecyclePhase.PREPARE_PACKAGE)
person cyberBuddha47    schedule 25.06.2013