2014-01-08 49 views
2

我想使用Gradle作爲多模塊Scala項目。我無法弄清楚如何使用Scala編譯器的genjavadoc插件。理想情況下,我想爲我的每個庫生成.jar-sources.jar-javadocs.jar.jar-sources.jar很簡單,但javadocs有點困難。在Maven和SBT中,您可以使用genjavadoc插件從Scala生成支持JavaDoc的代碼,然後運行JavaDoc。我不得不認爲,在Gradle中同樣可能,我只是不知道Gradle/Groovy足夠做到這一點。在Scala/Gradle的build.gradle中包含什麼

我可以創建ScalaDocs,但這些庫被Java開發人員使用,他們希望將JavaDocs附加到Eclipse中的.jars,我認爲這是一個完全合理的請求。

build.gradle中應該包含哪些內容來支持?

的編譯器插件是在這裏: https://github.com/typesafehub/genjavadoc

回答

3

好吧,我想通了這一個自己出去。我在這裏發佈它,希望別人會發現它有用。我沒有發佈我的整個build.gradle文件,只有配置scala項目的部分(我也有一些純java項目)。基本上,你將genjavadoc-plugin添加到依賴關係,傳遞一些參數,並確保你將'genjavadoc'目錄添加到javadoc任務。

// specific config for scala projects 
configure(scalaProjects) { 
    apply plugin: 'scala' 

    // this little hack zeroes out the java source directories 
    // so that the scala plugin can handle them 
    sourceSets.main.scala.srcDir "src/main/java" 
    sourceSets.main.java.srcDirs = [] 
    sourceSets.test.scala.srcDir "src/test/java" 
    sourceSets.test.java.srcDirs = [] 


    // define a configuration for scala compiler plugins 
    // the transitive=false means that the plugin won't show up 
    // as a dependency in the final output 
    configurations { 
     scalaCompilerPlugins { transitive = false } 
    } 

    // this plugin will transform .scala files into javadoc'able .java files 
    // so that the regular javadoc will run 
    dependencies { 
     scalaCompilerPlugins group: 'com.typesafe.genjavadoc', name: 'genjavadoc-plugin_2.10.2', version:'0.5' 
     compile group: 'org.scala-lang', name: 'scala-library', version:'2.10.2' 
     compile group: 'org.scala-lang', name: 'scala-compiler', version:'2.10.2' 
    } 

    // this string contains theplugin paths that get passed to the compiler 
    def pluginPaths = configurations.scalaCompilerPlugins.files.collect { "\"-Xplugin:${it.path}\"" } 

    // this is the genjavadoc arguments - effectively it tells the plugin where to put the generated code 
    compileScala.scalaCompileOptions.additionalParameters = pluginPaths + "\"-P:genjavadoc:out=$buildDir/genjavadoc\"" 

    task javaDocs(type : Javadoc) { 
     source = fileTree("src/main/java").include("*.java") + fileTree("$buildDir/genjavadoc") 
     options.addStringOption("-quiet") 
    } 

} 
相關問題