Gradle scala类已通过组合Java编译定义

Gradle scala类已通过组合Java编译定义,java,scala,gradle,Java,Scala,Gradle,我有以下scala编译问题 scala->取决于java源代码 java源->依赖于scala源 我的scala代码在src/main/scala中 我的java代码是src/main/java 我不能改变这段代码,所以我需要用gradle编译这段代码,它现在用JRuby编译就可以了 我已经阅读了以下关于如何解决这个问题的帖子: 我在构建中添加了以下内容: ext { baseName = 'd2' description = 'Divisional IVR.'

我有以下scala编译问题

  • scala->取决于java源代码
  • java源->依赖于scala源

  • 我的scala代码在src/main/scala中

  • 我的java代码是src/main/java
我不能改变这段代码,所以我需要用gradle编译这段代码,它现在用JRuby编译就可以了

我已经阅读了以下关于如何解决这个问题的帖子:

我在构建中添加了以下内容:

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文件复制到一个位置:

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'

scalaCompile似乎看到$combinedSources和'src/main/scala'

您就是这样配置的:
src/main/scala
是默认值,您添加了
“$combinedSources”
。要覆盖默认设置,请使用
sourceset.main.scala.srcDirs=[combinedSources]

在任何情况下,您都不必(也不应该)复制周围的源代码。以下是一个既不需要复制也不需要重新配置任务依赖项的解决方案:

sourceSets.main.scala.srcDir "src/main/java"
sourceSets.main.java.srcDirs = []
现在,您的Java和Scala代码将被联合编译,并且可以任意相互依赖

PS:使用
combinedSources
代替
“$combinedSources”

scalaCompile似乎看到$combinedSources和'src/main/scala'

您就是这样配置的:
src/main/scala
是默认值,您添加了
“$combinedSources”
。要覆盖默认设置,请使用
sourceset.main.scala.srcDirs=[combinedSources]

在任何情况下,您都不必(也不应该)复制周围的源代码。以下是一个既不需要复制也不需要重新配置任务依赖项的解决方案:

sourceSets.main.scala.srcDir "src/main/java"
sourceSets.main.java.srcDirs = []
现在,您的Java和Scala代码将被联合编译,并且可以任意相互依赖

PS:不要使用
“$combinedSources”
,而是使用
combinedSources

gradle.properties 格雷德尔先生 格拉德尔酒店 格雷德尔先生
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 = []
}