我想將我們過時的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