Два профиля сборки активны, но Maven выполняет задачи плагина antrun только в одном профиле - PullRequest
6 голосов
/ 03 февраля 2010

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

Тип сервера приложений и целевую среду следует указывать с помощью профилей Maven. Один и только один из каждого типа профиля должен присутствовать при компиляции кода. Все профили вызывают выполнение одной или нескольких задач копирования mavent-antrun-plugin для включения правильных файлов настроек в сгенерированный JAR.

Ниже приведена часть файла pom.xml. Включена часть профиля AS "oracle", а также часть профиля среды "development". Цель состоит в том, чтобы создать JAR, который можно развернуть в Oracle AS в среде разработки, код скомпилирован с использованием двух профильных переключателей mvn -P oracle,development

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

Моя проблема в том, что Maven отказывается выполнять задачи в обоих выбранных профилях.

mvn -Poracle работает так, как и положено. Так же и mvn -Pdevelopment. Однако mvn -Poracle,development приводит к выполнению только задач в профиле оракула. Если все задачи в плагине antrun профиля oracle закомментированы, то задачи в профиле разработки выполняются.

Мои вопросы: * Почему Maven отказывается выполнять задачи муравья в обоих этих профилях? * Есть ли способ это исправить?

Объединение профилей (oracle-development, jboss-development и т. Д.) Для нас не вариант, так как этот модуль является частью более крупного проекта и потребует модификации нескольких других проектов.

В настоящее время мы используем Maven 2.2.0.

<profile>
  <id>oracle</id>       
  <build>
    <plugins>       
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <phase>validate</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <tasks>
                 <copy .../>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>      
  </build>
</profile>    

...jboss, glassfish profiles... 

<profile>
  <id>development</id>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <tasks>
                <copy .../>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</profile>

...production, test profiles...

1 Ответ

7 голосов
/ 03 февраля 2010

Добавить уникальный идентификатор выполнения для каждого <execution>:

<profile>
  <id>oracle</id>       
  <build>
    <plugins>       
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>execution1</id>
            <phase>validate</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <tasks>
                 <echo>ORACLE</echo>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>      
  </build>
</profile>    
<profile>
  <id>development</id>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>execution2</id>
            <phase>compile</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <tasks>
                 <echo>DEV</echo>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</profile>

Проверенное рабочее решение :) Я думаю, что без элемента <id> один <execution> перекрывает другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...