Как мне указать порядок плагинов (привязанных к одной и той же фазе) в Maven 3? - PullRequest
6 голосов
/ 07 мая 2011

У меня есть многомодульный проект Scala, использующий Maven 3. Я хочу убедиться, что компилятор Scala работает до компилятора Java, как на этапах компиляции, так и на тестовой компиляции.

В своем родительском POM и POM-модуле я пытался перечислить плагины в разделе сборки, чтобы плагин компилятора Scala был первым, и все же Maven по-прежнему настаивает на том, чтобы сначала выполнялась компиляция Java, что иногда не удается У меня смешанный источник.

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

Вот часть моего родительского POM, которая определяет эти два плагина:

        <plugin>
            <groupId>org.scala-tools</groupId>
            <artifactId>maven-scala-plugin</artifactId>
            <version>2.15.2</version>
            <configuration>
                <scalaVersion>${scala.version}</scalaVersion>
            </configuration>
            <executions>
                <execution>
                    <id>compile</id>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                    <phase>compile</phase>
                </execution>
                <execution>
                    <id>test-compile</id>
                    <goals>
                        <goal>testCompile</goal>
                    </goals>
                    <phase>test-compile</phase>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

Дочерний модуль имеет свой собственный раздел , но не переопределяет ни один из этих плагинов (только exec-maven-plugin).

Ответы [ 4 ]

7 голосов
/ 08 мая 2011

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

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

На данный момент кажется, что лучшим решением для этой конкретной проблемы (смешанная компиляция Java / Scala) является привязка scala: compile к process-resources и scala: testCompile к process-test-resources, как указано в http://scala -tools.org / mvnsites / maven-scala-plugin / example_java.html

1 голос
/ 07 мая 2011

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

Лучше всего использовать SBT вместо Maven, поскольку он даст много преимуществ, помимо полученияправильный порядок компиляции.

Если отойти от Maven невозможно, следуйте инструкциям по настройке maven-scala-plugin здесь: http://scala -tools.org / mvnsites / maven-scala-plugin / example_java.html

1 голос
/ 07 мая 2011

вы можете запустить 2 отдельные цели вместе, и maven выполнит цели в последовательности:

mvn scala:compile compiler:compile
0 голосов
/ 07 мая 2011

Является ли id для подключаемого модуля maven компилятором default-compile?Если нет, можете ли вы установить его и попробовать, если он работает?

Если нет, вы можете обновить вопрос соответствующим фрагментом pom и фрагментом из запуска maven.

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