我有一个非常基本的sbt项目,除了一个.java
文件外,所有的scala代码都需要生成一个标准的javadoc网页。
我正在尝试按照the plugin's README上的说明进行操作。我已将“集成到SBT构建非常简单”之后的所有代码复制到了我的JavaDoc
文件中,该代码将变量javadocSettings
和build.sbt
定义到了我的javadocSettings
文件中,并且还添加了以下内容:
resolvers += "Typesafe Releases" at "https://repo.typesafe.com/typesafe/releases/"
autoCompilerPlugins := true
说明说我必须“将[]
Project
添加到genjavadoc:doc
”。我不知道那是什么意思这是自述文件中的代码做什么的,还是我需要做的单独的事情?如果是这样,怎么办?无论如何,自述文件都会继续:“可以使用
sbt
生成JavaDoc”。但是,在中,我看到了:> genjavadoc:doc
[error] No such setting/task
[error] genjavadoc:doc
[error] ^
>
我想念什么?
最佳答案
您需要一个配置,如插件的README.md
中所述。您的任务调用无效,因为sbt中通常没有genjavadoc
。
您必须按照插件文档中的说明进行添加。在您的build.sbt
文件中,添加插件推荐的以下内容(保留已拥有的内容):
lazy val JavaDoc = config("genjavadoc") extend Compile
lazy val javadocSettings = inConfig(JavaDoc)(Defaults.configSettings) ++ Seq(
libraryDependencies += compilerPlugin("com.typesafe.genjavadoc" %% "genjavadoc-plugin" % "0.7" cross CrossVersion.full),
scalacOptions <+= target map (t => "-P:genjavadoc:out=" + (t / "java")),
packageDoc in Compile <<= packageDoc in JavaDoc,
sources in JavaDoc <<= (target, compile in Compile, sources in Compile) map ((t, c, s) =>
(t / "java" ** "*.java").get ++ s.filter(_.getName.endsWith(".java"))),
javacOptions in JavaDoc := Seq(),
artifactName in packageDoc in JavaDoc :=
((sv, mod, art) => "" + mod.name + "_" + sv.binary + "-" + mod.revision + "-javadoc.jar")
)
但是,要使其正常工作,您需要将配置和设置添加到项目中。最简单的方法是在
build.sbt
中增加一行:lazy val root = project.in(file(".")).configs(JavaDoc).settings(javadocSettings: _*)
现在您应该可以使用
genjavadoc:doc
生成javadoc了。鉴于以上所述,完整的
build.sbt
可能如下所示:resolvers += "Typesafe Releases" at "https://repo.typesafe.com/typesafe/releases/"
lazy val root = project.in(file(".")).configs(JavaDoc).settings(javadocSettings: _*)
lazy val JavaDoc = config("genjavadoc") extend Compile
lazy val javadocSettings = inConfig(JavaDoc)(Defaults.configSettings) ++ Seq(
libraryDependencies += compilerPlugin("com.typesafe.genjavadoc" %% "genjavadoc-plugin" % "0.7" cross CrossVersion.full),
scalacOptions <+= target map (t => "-P:genjavadoc:out=" + (t / "java")),
packageDoc in Compile <<= packageDoc in JavaDoc,
sources in JavaDoc <<= (target, compile in Compile, sources in Compile) map ((t, c, s) =>
(t / "java" ** "*.java").get ++ s.filter(_.getName.endsWith(".java"))),
javacOptions in JavaDoc := Seq(),
artifactName in packageDoc in JavaDoc :=
((sv, mod, art) => "" + mod.name + "_" + sv.binary + "-" + mod.revision + "-javadoc.jar")
)
PS。小小的好处,如果您使用的SBT高于0.13.2,则可以定义
javadocSettings
而不使用<<=
和<+=
以及其他类似的运算符:lazy val javadocSettings = inConfig(JavaDoc)(Defaults.configSettings) ++ Seq(
addCompilerPlugin("com.typesafe.genjavadoc" %% "genjavadoc-plugin" % "0.7" cross CrossVersion.full),
scalacOptions += s"-P:genjavadoc:out=${target.value}/java",
packageDoc in Compile := (packageDoc in JavaDoc).value,
sources in JavaDoc :=
(target.value / "java" ** "*.java").get ++ (sources in Compile).value.filter(_.getName.endsWith(".java")),
javacOptions in JavaDoc := Seq(),
artifactName in packageDoc in JavaDoc :=
((sv, mod, art) => "" + mod.name + "_" + sv.binary + "-" + mod.revision + "-javadoc.jar")
)