我想将我们过时的Ant构建转换为Gradle。该项目包含Java 50子项目和10个Scala子项目。 Java项目只包含Java和Scala项目,只包含Scala。每个项目都是由Java构建,然后是Scala,这大大减缓了我们的构建。如何在Gradle中支持多语言(Java和Scala)中的多个项目?
我想尽可能多的公共逻辑放在根目录的build.gradle文件可能看起来像这样:
subprojects {
apply plugin: 'java'
apply plugin: 'scala'
sourceCompatibility=1.7
targetCompatibility=1.7
sourceSets {
main {
scala {
srcDir 'src'
}
java {
srcDir 'src'
}
}
test {
scala {
srcDir 'test'
}
java {
srcDir 'test'
}
}
}
repositories {
mavenCentral()
}
dependencies {
scalaTools "org.scala-lang:scala-compiler:2.9.3"
compile "org.scala-lang:scala-library:2.9.3"
}
// Use the sbt compiler (not scalac ant task)
tasks.withType(ScalaCompile) {
scalaCompileOptions.useAnt = false
}
task showCompileClasspath << {
sourceSets.main.compileClasspath.each { println it }
}
test {
systemProperty "user.dir", projectDir
}
}
当我运行我的体型,我得到下面的输出中,请注意:esb-server:compileJava
和:esb-server:compileScala
包含相同的警告,所以类正在建造两次。另请注意,所有其他项目包含compileJava
和compileScala
:common:assemble
:esb-server:compileJava
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
:esb-server:compileScala
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
:esb-server:processResources UP-TO-DATE
:esb-server:classes
:esb-server:jar
:esb-server:assemble
:plugins:compileJava UP-TO-DATE
:plugins:compileScala UP-TO-DATE
:plugins:processResources UP-TO-DATE
:plugins:classes UP-TO-DATE
:plugins:jar
:plugins:assemble
:raas-transform:assemble
:saxonee-helper:assemble
:scala-common:compileJava UP-TO-DATE
:scala-common:compileScala
/Users/iain.hull/code/trunk/ccdev/scala-common/src/com/workday/esb/assembly/audit/TreeAudit.scala:138: method first in trait IterableLike is deprecated: use `head' instead
override def getLast():Option[AuditNode] = if (children.isEmpty) None else children.first.getLast
^
one warning found
:scala-common:processResources UP-TO-DATE
:scala-common:classess
:scala-common:jar
:scala-common:assemble
:plugins:hibernatepersistence:compileJava
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
:plugins:hibernatepersistence:compileScala
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
:plugins:hibernatepersistence:processResources
:plugins:hibernatepersistence:classes
:plugins:hibernatepersistence:jar
:plugins:hibernatepersistence:assemble
我知道这两个apply plugin
线在我的根build.gradle
顶部导致此行为。但是,如果我只将正确的插件应用于每个子项目,我无法将通用配置重构为我的根build.gradle
。另一种方法是只使用Scala插件来处理所有事情,但这是最好的方法吗?
我可以使用Java插件编译Java项目和Scala插件来编译Scala项目,并且仍然可以将我的所有项目的常见构建配置重构为根build.gradle
?在Gradle中支持多种语言的最佳方式是什么?
作为斯卡拉摇篮文件插件说 - “Scala插件扩展了Java插件以添加对Scala项目的支持”。而'compileScala'实际上依赖于'compileJava'这就是为什么你看到它们都在为每个项目执行 – 2013-04-05 08:11:47
感谢您的意见,但是我知道这一点。然而,用java和scala支持项目的最佳方式是什么?它只是把所有东西都当作scala,因为它包含了java?如果我们决定在未来添加一个groovy项目会发生什么?它必须具备Scala和Groovy性质吗?我应该在担心这个之前将我的源代码结构标准化吗? – iain 2013-04-05 18:28:04