如何在Maven 3中指定插件的顺序(绑定到同一阶段)?

时间:2011-05-07 06:40:02

标签: scala plugins maven compilation

我有一个使用Maven 3的多模块Scala项目。 我想确保Scala编译器在Java编译器之前运行,包括编译和测试编译阶段。

我已经尝试过,在我的父POM和模块POM中,列出构建部分中的插件,以便Scala编译器插件是第一个,但是Maven仍然坚持首先运行Java编译,但在某些情况下,它会失败我有混合来源。

我知道我可以通过将Scala编译绑定到process-resources而不是compile来解决这个问题,但我真的更愿意知道如何告诉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>

子模块有自己的&lt; plugins&gt;部分,但不重新定义这些插件(只是exec-maven-plugin)。

4 个答案:

答案 0 :(得分:7)

The Maven development team has confirmed目前无法完全控制阶段内插件执行的顺序,除非您编写自己的自定义生命周期并使用自定义程序包类型。

我已经为他们创建了an enhancement request in JIRA来考虑解决这个问题。如果这是一个问题,请投票支持。

目前看来,针对此特定问题(混合Java / Scala编译)的“最佳实践”解决方法是将scala:compile编译为process-resources,将scala:testCompile绑定到process-test-resources,如指定的那样在http://scala-tools.org/mvnsites/maven-scala-plugin/example_java.html

答案 1 :(得分:1)

你可以一起运行2个单独的目标,maven将按顺序执行目标:

mvn scala:compile compiler:compile

答案 2 :(得分:1)

要编译混合的Java / Scala项目,它实际上比只是编译一个然后另一个更复杂。除此之外,Scala编译器还能够解析Java文件,以匹配您从Scala使用的任何Java类的签名。编译器基本上可以为你做正确的事情,但你必须先告诉它这样做。

最好的办法是使用SBT而不是Maven,因为除了正确的编辑顺序之外,它还可以提供许多好处。

如果不能选择离开Maven,请按照maven-scala-plugin的配置说明进行操作:http://scala-tools.org/mvnsites/maven-scala-plugin/example_java.html

答案 3 :(得分:-1)

maven编译器插件的iddefault-compile吗?如果没有,你可以设置它并尝试它是否有效?

如果没有,您可以使用相关的pom代码段和maven运行中的代码段来更新问题。