2014-03-04 47 views
5

當使用管理的相關性,我可以告訴SBT下載的javadoc和來源:有SBT依賴投入的javadoc和源的類路徑上

"mygroup" % "mymodule" % "myversion" withJavadoc() withSources() 

但這些罐子似乎並沒有要上運行時類路徑?

我想要做的是從我的應用程序訪問javadocs和源代碼。我可以讓這些罐子顯示爲託管資源,這樣我就可以做

ClassLoader.getSystemClassLoader.getResource("/my/package/MyDependency.scala") 

回答

7

你可以通過添加一個classifier來做到這一點。

對於一個給定的庫的依賴,增加javadocsourcesclassifer

libraryDependencies += "org.scalaz" %% "scalaz-core" % "7.0.6" classifier "javadoc" 

libraryDependencies += "org.scalaz" %% "scalaz-core" % "7.0.6" classifier "sources" 

然後,從classpath中訪問其內容:

val docStream = getClass.getResourceAsStream("""/scalaz/Monad$.html""") 
val doc = io.Source.fromInputStream(docStream).mkString 
println(doc) 

這裏有一個工作示例:https://earldouglas.com/ext/stackoverflow.com/questions/22160701/

+0

謝謝詹姆斯,這似乎工作確實。我曾經/可能有一個sbt-idea插件或IntelliJ Scala插件本身的問題:如果我在IDEA中創建運行配置,則找不到這些資源。但我只是用sbt-assembly來測試它,它包含了源和文檔,所以它基本上可以正常工作。現在我只需要找到在IDEA類路徑中包含額外jar的最佳方法。 –

+0

使用'gen-idea no-classifiers'使它工作;看來這兩個設置是相互衝突的。 –

+0

我不確定sbt有哪些版本,但是我的版本有一個內置的方法'withJavadoc()',可以附加到任何行。例如,'libraryDependencies + =「org.scalaz」%%「scalaz-core」%「7.0.6」withJavadoc()'。同樣可以用於來源。資料來源:http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Library-Management.html – casey