【问题标题】:How to force SBT to use Javadoc instead of Scaladoc?如何强制 SBT 使用 Javadoc 而不是 Scaladoc?
【发布时间】:2014-10-17 15:16:05
【问题描述】:

我有一个基于 Java 的 Play & Akka 项目,它是用 SBT 构建的,有没有办法告诉 SBT 在构建项目时运行 Javadoc 而不是 Scaladoc? SBT 文档说

“如果项目中只有 Java 源,sbt 将运行 javadoc。如果有任何 Scala 源,sbt 将运行 scaladoc。”

项目中没有 Scala 文件,但 Scaladoc 仍在运行。我认为这是因为 Play 插件在编译之前将视图模板和 conf/routes 文件转换为 Scala 代码。

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    tl;dr 更改 sources in (Compile, doc) 以排除 *.scala 文件,这样 scaladoc 就不会启动。

    正如您在下面看到的,sources in (Compile, doc) 在一个项目中拥有所有资源,包括托管和非托管

    > inspect compile:doc::sources
    [info] Task: scala.collection.Seq[java.io.File]
    [info] Description:
    [info]  All sources, both managed and unmanaged.
    

    通过一些filtering,您可以很容易地实现您的目标 - 在build.sbt 中使用以下内容:

    sources in (Compile, doc) <<= sources in (Compile, doc) map { _.filterNot(_.getName endsWith ".scala") }
    

    一个示例项目的会话(带有// 的cmets 是我的以增强阅读):

    // display current setting's value
    > show compile:doc::sources
    [info] ArrayBuffer(/Users/jacek/sandbox/sbt-learning-space/src/main/scala/x.scala, /Users/jacek/sandbox/sbt-learning-space/src/main/java/Hello.java)
    [success] Total time: 0 s, completed Aug 24, 2014 9:31:34 PM
    
    // generate docs - scaladoc kicks in since there are scala files
    > doc
    [info] Updating {file:/Users/jacek/sandbox/sbt-learning-space/}sbt-learning-space...
    [info] Resolving org.fusesource.jansi#jansi;1.4 ...
    [info] Done updating.
    [info] Main Scala API documentation to /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api...
    model contains 3 documentable templates
    [info] Main Scala API documentation successful.
    Hello
    [success] Total time: 1 s, completed Aug 24, 2014 9:32:15 PM
    
    // change the value of sources in the current session only - use session save to retain it
    > set sources in (Compile, doc) <<= sources in (Compile, doc) map { _.filterNot(_.getName endsWith ".scala") }
    [info] Defining compile:doc::sources
    [info] The new value will be used by compile:doc
    [info] Reapplying settings...
    [info] Set current project to hello (in build file:/Users/jacek/sandbox/sbt-learning-space/)
    
    // display current setting's value - it only holds the single java file
    > show compile:doc::sources
    [info] ArrayBuffer(/Users/jacek/sandbox/sbt-learning-space/src/main/java/Hello.java)
    [success] Total time: 0 s, completed Aug 24, 2014 9:33:23 PM
    
    // generate docs - javadoc is properly generated
    > doc
    [info] Main Java API documentation to /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api...
    [info] Loading source file /Users/jacek/sandbox/sbt-learning-space/src/main/java/Hello.java...
    [info] Constructing Javadoc information...
    [info] Standard Doclet version 1.7.0_65
    [info] Building tree for all the packages and classes...
    [info] Generating /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api/Hello.html...
    [info] Generating /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api/package-frame.html...
    [info] Generating /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api/package-summary.html...
    [info] Generating /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api/package-tree.html...
    [info] Generating /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api/constant-values.html...
    [info] Building index for all the packages and classes...
    [info] Generating /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api/overview-tree.html...
    [info] Generating /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api/index-all.html...
    [info] Generating /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api/deprecated-list.html...
    [info] Building index for all classes...
    [info] Generating /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api/allclasses-frame.html...
    [info] Generating /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api/allclasses-noframe.html...
    [info] Generating /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api/index.html...
    [info] Generating /Users/jacek/sandbox/sbt-learning-space/target/scala-2.10/api/help-doc.html...
    [info] Main Java API documentation successful.
    Hello
    [success] Total time: 1 s, completed Aug 24, 2014 9:34:01 PM
    

    【讨论】:

      【解决方案2】:

      scala 2.12.0-RC1 (Sept. 2016)SI 4826 允许的另一种方法是让scaladoc 运行!它将处理 javadoc cmets!

      Scaladoc 已经处理 Java 源代码并为它们生成 Scaladoc。
      它只是忽略了文档 cmets。

      出于各种原因,我们的许多 Scala 代码库中至少包含一些 Java。
      如果 Scaladoc 可以为这些混合代码库(包括所有 doc cmets)生成完整的文档,那就太好了。

      【讨论】:

        【解决方案3】:

        您可以尝试将genjavadoc 集成到 sbt 中,以生成 javadoc。

        ScalaDoc 仍然可以使用普通的doc 任务生成,
        而 JavaDoc 可以使用 genjavadoc:doc 生成。

        【讨论】:

          猜你喜欢
          • 2016-03-17
          • 2014-12-26
          • 2012-11-28
          • 1970-01-01
          • 1970-01-01
          • 2013-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多