我看到没有人提到David Bernard的scala-maven-plugin,以前是maven-scala-plugin,在@richard-close的答案中提到过。我没有丰富的经验,但我在两个Java项目(一个相当大的,一个小的)上取得了立竿见影的成功,所以我认为值得在这里发布这个 - 即使这个问题现在有点过时了 - 因为我通过Google找到了这个问题。
混合Java/Scala项目页面应该能够让你继续前进,尽管还有其他有趣的文档页面。只需添加此处显示的相关部分,然后尝试编译您的项目。不要犯我犯的错误,并尝试首先使用其他地方记录的其他配置:只需遵循顶级pom中的这些最小配置更改.xml(或者如果Scala在您的项目中范围有限,则进行任何有意义的更改)。转到此处以获取更易于复制和粘贴的文本(没有“+”显示添加的内容)。
<dependencies>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ <version>2.11.7</version>
+ </dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
+ <plugin>
+ <groupId>net.alchim31.maven</groupId>
+ <artifactId>scala-maven-plugin</artifactId>
+ <version>3.2.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
</plugins>
</pluginManagement>
<plugins>
+ <plugin>
+ <groupId>net.alchim31.maven</groupId>
+ <artifactId>scala-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>scala-compile-first</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>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>compile</phase>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
如果您使用的是Java 8(即Scala 2.11.x),请确保使用上述Scala的更新版本;一些官方文档可能会稍微模糊。
我注意到文档说你需要做但显然不需要做的一件事:你不需要把你的Scala源代码放在一个单独的目录中,并且可以将它们留在项目的现有java目录下。这很方便,似乎有效,但我不知道是否有副作用。
IntelliJ notes
如果您碰巧使用IntelliJ,请不要忘记右键单击项目视图中的maven模块并“添加框架支持...”将 Scala 框架添加到项目中。如果您使用的是多模块项目,而不仅仅是顶级模块,则可能需要将框架添加到打算使用 Scala 的每个子模块中。然后,您应该能够自动将Java文件转换为Scala文件,可以通过重构菜单访问(尽管您需要进行一些手动修复)。这可以为您提供一种快速测试配置的方法,特别是如果您可以先尝试一些小的Java类。
警告
@james-adam关于JavaConversions的评论也非常重要。在尝试在单个项目中将 Scala 与另一种 JVM 语言(Kotlin)集成时,我意识到的一个问题是,由于每种语言处理集合的方式,事情可能并不那么顺利:它们都被设计为与 Java 很好地配合使用,但不一定彼此兼容。我不知道细节,但无论如何,这与问题有点无关。