今日、私は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コンパイラプラグインが「ハッキー」に見える前に実行されることを確認します。
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>
なぜこのソリューションがブログ投稿や公式プラグインページでアドバイスされていないのか疑問に思います。このアプローチの欠点はありますか?最初のソリューションの代わりに2番目のソリューションを使用すると予想される問題はありますか?