2015-04-06 49 views
1

我對一個包含多個Scala子項目的項目使用Gradle(v2.3)。生成每個子項目的ScalaDoc可以按預期單獨工作(運行gradle :project-a:scaladocgradle :project-b:scaladoc)。使用Gradle爲多個子項目生成單個ScalaDoc

但如何做一個得到所有斯卡拉子項目 ScalaDoc?下面最小項目執行
gradle scaladoc --info時導致錯誤,一個「對空對象不能調用方法withInputStream()」:

Starting Build 
Compiling settings file '/tmp/gradle-scaladoc-test/settings.gradle' using StatementExtractingScriptTransformer. 
Compiling settings file '/tmp/gradle-scaladoc-test/settings.gradle' using BuildScriptTransformer. 
Settings evaluated using settings file '/tmp/gradle-scaladoc-test/settings.gradle'. 
Projects loaded. Root project using build file '/tmp/gradle-scaladoc-test/build.gradle'. 
Included projects: [root project 'some project', project ':project-a', project ':project-b'] 
Evaluating root project 'some project' using build file '/tmp/gradle-scaladoc-test/build.gradle'. 
Compiling build file '/tmp/gradle-scaladoc-test/build.gradle' using StatementExtractingScriptTransformer. 
Compiling build file '/tmp/gradle-scaladoc-test/build.gradle' using BuildScriptTransformer. 
Evaluating project ':project-a' using empty build file. 
Evaluating project ':project-b' using empty build file. 
All projects evaluated. 
Selected primary task 'scaladoc' from project : 
Tasks to be executed: [task ':scaladoc', task ':project-a:compileJava', task ':project-a:compileScala', task ':project-a:processResources', task ':project-a:classes', task ':project-a:scaladoc', task ':project-b:compileJava', task ':project-b:compileScala', task ':project-b:processResources', task ':project-b:classes', task ':project-b:scaladoc'] 
:scaladoc (Thread[main,5,main]) started. 
:scaladoc 
Executing task ':scaladoc' (up-to-date check took 0.448 secs) due to: 
    No history is available. 
:scaladoc FAILED 
:scaladoc (Thread[main,5,main]) completed. Took 0.768 secs. 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':scaladoc'. 
> Cannot invoke method withInputStream() on null object 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output. 

BUILD FAILED 

Total time: 5.198 secs 
Stopped 0 compiler daemon(s). 

目錄結構:

├─ project-a/ 
│   └─ src/ 
│    └─ main/ 
│     └─ scala/ 
│      └─ package_a/ 
│       └─ A.scala 
├─ project-b/ 
│   └─ src/ 
│    └─ main/ 
│     └─ scala/ 
│      └─ package_b/ 
│       └─ B.scala 
├─ build.gradle 
└─ settings.gradle 

build.gradle

subprojects { 
    repositories { 
    mavenCentral() 
    } 

    apply plugin: 'scala' 

    dependencies { 
    compile 'org.scala-lang:scala-library:2.11.6' 
    } 

    tasks.withType(ScalaCompile) { 
    scalaCompileOptions.additionalParameters = ['-unchecked', '-deprecation', '-feature'] 
    scalaCompileOptions.useAnt = false 
    } 
} 


task scaladoc(type: org.gradle.api.tasks.scala.ScalaDoc) { 
    group = 'Documentation' 
    description = 'Aggregated ScalaDoc documentation.' 
    title = 'Title of documentation' 
    destinationDir = new File(buildDir, "aggregated-api") 

    source subprojects.collect { project -> 
    project.sourceSets.main.allScala 
    } 

    scalaClasspath = files(subprojects.collect { project -> 
    project.sourceSets.main.compileClasspath 
    }) 

    classpath = files(subprojects.collect { project -> 
    project.sourceSets.main.compileClasspath 
    }) 
} 

settings.gradle

rootProject.name = 'some project' 
include 'project-a', 'project-b' 

A.scala

package package_a 
case class A(value: Int) 

B.scala

package package_b 
case class B(value: Int)  

我能找到的唯一類似的問題是"Gradle Fails to Compile Basic Scala Project",但它在這裏沒有幫助(並且是關於Gradle 1.3)。

+0

我知道你不是問這個問題,但如果這是一個構建,你可以利用[sbt-unidoc插件](https://github.com/sbt/sbt-unidoc) –

+0

嘗試調整其中一個許多[gradle aggregate javadoc](https://www.google.com/search?q=gradle+aggregate+javadoc)示例。 –

+0

感謝您的建議。 sbt是沒有選擇的,它必須用Gradle來完成。 – hiddenbit

回答

0

我知道它已經有一段時間,因爲這已被問過,但因爲我只是有完全相同的問題...

我解決它的方式如下:

task aggregatedScaladocs(type: ScalaDoc, description: 'Generate scaladocs from all child projects as if it were a single project', group: 'Documentation') { 
destinationDir = file("$buildDir/docs/scaladoc") 
title = "$project.name $version API" 

subprojects.each { proj -> 
    proj.tasks.withType(ScalaDoc).each { 
     source += proj.sourceSets.main.allJava 
     source += proj.sourceSets.main.allScala 
     classpath += proj.sourceSets.main.compileClasspath 
     excludes += scaladoc.excludes 
     includes += scaladoc.includes 
    } 
} 

}

希望它能幫助某個人。

相關問題