0

次のscalaコンパイルの問題があります

  • scala -> Java ソースに依存
  • Java ソース -> scala ソースに依存

  • 私のscalaコードはsrc/main/scalaにあります

  • 私の Java コードは src/main/java にあります

このコードを変更することはできないので、これを gradle でコンパイルする必要があります。現在、JRuby で問題なくコンパイルされています。

この問題を解決する方法について、次の投稿を読みました。

http://forums.gradle.org/gradle/topics/how_to_compile_a_java_class_that_depends_on_a_scala_class_in_gradle

http://forums.gradle.org/gradle/topics/how_to_compile_a_java_class_that_depends_on_a_scala_class_in_gradle

これをビルドに追加しました:

ext {
    baseName = 'd2'
    description = 'Divisional IVR.'
    combinedSources = "$buildDir/combined-sources"
}

apply plugin: 'scala'

compileScala.taskDependencies.values = compileScala.taskDependencies.values - 'compileJava'
compileJava.dependsOn compileScala

sourceSets.main.scala.srcDir "$combinedSources"
sourceSets.main.java.srcDirs = []

すべての scala ファイルと java ファイルを 1 つの場所にコピーしようとしました。

compileScala.dependsOn{
    copyAllSourceFiles
}

task copyAllSourceFiles(type:Copy) {
    description = 'Copy All Source Files.'
    from('src/main/java') {}
    from('/src/main/scala') {}
    into combinedSources

    includeEmptyDirs = false
}

しかし今、私はエラーが発生します:

[ant:scalac] Compiling 18 source files to C:\usr\git_workspaces\xivr\d2\target\classes\main
[ant:scalac] Compiling 18 scala and 196 java source files to C:\usr\git_workspaces\xivr\d2\target\classes\main
[ant:scalac] C:\usr\git_workspaces\xivr\d2\target\combined-sources\com\comcast\ivr\d2\actors\AlternateAniWithAccountActor.scala:9: error: AlternateAniWithAccountActor is already defined as class AlternateAniWithAccountActor

scalaCompile が $combinedSources と 'src/main/scala' を認識しているようです

4

2 に答える 2

2

scalaCompile が $combinedSources と 'src/main/scala' を認識しているようです

それがあなたの設定方法です:src/main/scalaがデフォルトで、 を追加しまし"$combinedSources"た。デフォルトをオーバーライドするには、 を使用しますsourceSets.main.scala.srcDirs = [combinedSources]

いずれにせよ、ソースをコピーする必要はありません (コピーすべきではありません)。タスクの依存関係のコピーも再構成も必要としないソリューションの 1 つを次に示します。

sourceSets.main.scala.srcDir "src/main/java"
sourceSets.main.java.srcDirs = []

これで、Java と Scala のコードが共同でコンパイルされ、相互に任意に依存できるようになります。

PS: の代わりに"$combinedSources"、 を使用しますcombinedSources

于 2012-10-26T15:06:19.860 に答える
1

gradle.properties

theVersion=2.1
theSourceCompatibility=1.7
theScalaVersion=2.10.3

build.gradle

apply {
    plugin 'scala'
    plugin 'java'
    plugin 'idea'
}

ext {
    scalaVersion = theScalaVersion
}

sourceCompatibility = theSourceCompatibility

tasks.withType(ScalaCompile) {
    scalaCompileOptions.useAnt = false
}

dependencies {
    compile "org.scala-lang:scala-library:$theScalaVersion"
    compile "org.scala-lang:scala-compiler:$theScalaVersion"
}

sourceSets {
    main.scala.srcDirs = ["src/main/scala", "src/main/java"]
    main.java.srcDirs = []
}
于 2014-09-26T08:36:54.927 に答える