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

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

Тип сервера приложений и целевую среду следует указывать с помощью профилей 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 ответ

Решение

Добавить уникальный идентификатор выполнения для каждого <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> переопределяет другой.

Другие вопросы по тегам