gpt4 book ai didi

java - Maven:在一个项目中混合使用 Java 和 Scala

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:15 24 4
gpt4 key购买 nike

今天我一直在努力寻找一个合适的解决方案来建立一个同时包含 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 编译器插件在 中运行时,.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>

我想知道为什么这个解决方案不是博客文章或官方插件页面上建议的解决方案。这种方法有什么缺点吗?使用第二种解决方案而不是第一种解决方案是否会出现任何问题?

最佳答案

  • 是的,解决方案是“hacky”,但 maven-compiler-plugin 始终是第一个在编译阶段运行的插件(就像硬编码到 maven 中一样)。
  • 我没有使用 scala 2.11 进行测试,但以前版本的 scalac 不会将 .java 编译成 .class(仅解析它们)。从 2.7 开始,scala-maven-plugin 可以与“每个版本的 scala”一起运行。

关于java - Maven:在一个项目中混合使用 Java 和 Scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33836905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com