我正在尝试将过时的Ant构建转换为Gradle.该项目包含大约Java 50子项目和10个Scala子项目. Java项目仅包含Java,Scala项目仅包含Scala.每个项目都是由Java和Scala构建的,这大大减慢了我们的构建速度.
我想在root 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
我知道在我的根build.gradle顶部的两个应用插件行导致了这种行为.但是,如果我只将正确的插件应用于每个子项目,我无法将常用配置重构为我的根build.gradle.另一种方法是只使用Scala插件,但这是最好的方法吗?
我可以使用Java插件编译Java项目和Scala插件来编译Scala项目,还是将所有项目的公共构建配置重构为root build.gradle吗?在Gradle中支持多种语言的最佳方法是什么?
解决方法:
这样的事情怎么样:
configure(subprojects.findAll {project ->
file('src/main/java').exists()
}) {
apply plugin: 'java'
}
configure(subprojects.findAll {project ->
file('src/main/scala').exists()
}) {
apply plugin: 'scala'
}
因为您的源目录是src,所以需要在闭包内部使用其他一些鉴别器机制.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。