【发布时间】:2016-02-23 13:03:43
【问题描述】:
今天我一直在尝试找到一个合适的解决方案来设置一个包含 Java 和 Scala 代码(它们之间具有双向依赖关系)的 maven 项目。
我发现的解决方案通常包括在process-resources 阶段调用 scala-maven-plugin 或 maven-scala-plugin 以便它在默认的 maven 编译器插件之前运行(例如:http://www.hascode.com/2012/03/snippet-mixing-scala-java-in-a-maven-project/、https://itellity.wordpress.com/2014/08/21/mixing-scala-and-java-in-a-maven-project/ ,
scala-maven-plugin 官方页面:http://davidb.github.io/scala-maven-plugin/example_java.html)。
这导致了如下所示的解决方案:
<build>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<recompileMode>incremental</recompileMode>
<executions>
<execution>
<id>scala-compile</id>
<phase>process-resources</phase>
<goals>
<goal>add-source</goal>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>scala-test-compile</id>
<phase>process-test-resources</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
此解决方案运行良好 - Scala 编译在 process-resources 阶段调用,它编译 Java 和 Scala 代码,因此当 maven 编译器插件在 compile 阶段运行时,.class 文件已准备就绪。
问题是这个解决方案在我看来并不干净。在编译阶段之前调用 Scala 编译过程只是为了确保它在 maven 编译器插件看起来“hacky”之前运行。
Scala 编译器无论如何都会编译 Java 类,所以我想我可以完全关闭默认的 maven 编译器插件,然后 Scala 编译器可以在compile 阶段运行。虽然配置有点长,但对我来说看起来更干净:
<build>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<recompileMode>incremental</recompileMode>
<executions>
<execution>
<id>scala-compile</id>
<phase>compile</phase>
<goals>
<goal>add-source</goal>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>scala-test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<execution>
<id>default-testCompile</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
我想知道为什么这个解决方案不是博客文章或官方插件页面上建议的解决方案。这种方法有什么缺点吗?使用第二种解决方案而不是第一种解决方案有什么问题吗?
【问题讨论】:
标签: java scala maven scala-maven-plugin