Sbt 将scaladoc可以使用的资源(如图像)放置在何处?

Sbt 将scaladoc可以使用的资源(如图像)放置在何处?,sbt,scaladoc,Sbt,Scaladoc,我目前正在编写用Scala编写的API文档。我想包括几个图表,使代码更容易理解 我想知道在哪里放置资源(如图表),以便通过调用scaladoc自动导入它们,以及如何在代码文档中引用这些资源 例如,假设我使用sbt。我的代码位于src/main/scala目录中。下面是packagefoo的scala包对象示例: /** * Provides main classes of the bar API. * * ==Overview== * Main classes are depicted

我目前正在编写用Scala编写的API文档。我想包括几个图表,使代码更容易理解

我想知道在哪里放置资源(如图表),以便通过调用scaladoc自动导入它们,以及如何在代码文档中引用这些资源

例如,假设我使用sbt。我的代码位于
src/main/scala
目录中。下面是package
foo
的scala包对象示例:

/**
 * Provides main classes of the bar API.
 *
 * ==Overview==
 * Main classes are depicted on the following diagram:
 * <img src="path/to/diagram-foo.svg" />
 *
 */
package object foo {
}
/**
*提供bar API的主要类。
*
*==概述==
*主要类别如下图所示:
* 
*
*/
包对象foo{
}

“diagram foo.svg”应该位于我的项目中的何处,以便scaladoc可以看到?随后,在
img
标记中
path/to/
的正确值是多少?

警告这可能是一个黑客行为,因为我对scaladoc知之甚少

由于
只是一个普通的HTML,您只需要将必要的资产复制到文档目标路径,这样
img
就可以解析了

您可以使用以下
copydocassettask
自定义任务,该任务与
(doc in Compile)
src/main/doc resources
目录一起提供所需的内容。要点是将图像复制到生成文档的目录,即
(target in(Compile,doc))。value

构建.sbt

lazy val copyDocAssetsTask = taskKey[Unit]("Copy doc assets")

copyDocAssetsTask := {
  println("Copying doc assets")
  val sourceDir = file("src/main/doc-resources")
  val targetDir = (target in (Compile, doc)).value
  IO.copyDirectory(sourceDir, targetDir)
}

copyDocAssetsTask <<= copyDocAssetsTask triggeredBy (doc in Compile)
lazy val copydocassettask=taskKey[Unit](“复制单据资产”)
CopyDocAssetTask:={
println(“复制单据资产”)
val sourceDir=文件(“src/main/doc资源”)
val targetDir=(目标位于(编译,文档)).value
IO.copyDirectory(sourceDir、targetDir)
}

copyDocAssetsTask谢谢,我使用了一个改编版本,希望能对其他人有所帮助,尤其是在多模块项目上:

首先,unidoc at将把多模块项目中的scaladoc合并到一个位置,这通常是您想要的。然后在build.sbt中执行以下操作:

lazy val copyDocAssetsTask = taskKey[Unit]("Copy unidoc resources")

copyDocAssetsTask := {
  println("Copying unidoc resources")
  val sourceDir = file("src/main/doc-resources")
  val targetDir = (target in (Compile, doc)).value.getParentFile
  println(s"from ${sourceDir.getAbsolutePath} to ${targetDir.getAbsolutePath}")
  IO.copyDirectory(sourceDir, new java.io.File(targetDir, "unidoc"))
}

copyDocAssetsTask := (copyDocAssetsTask triggeredBy (unidoc in Compile)).value
然后将您的文档放在根项目中的
src/main/doc resources
子目录下,该子目录遵循您的包结构,以便使用scaladoc将类的路径包括在图表中(这只需避免您在URL中混淆父目录),并嵌入如下内容:

在您的scaladoc中


e、 g.如果此scaladoc位于多模块构建中任何项目的包
com.someone.thing
中的一个类中,则
DesignModel.svg
文件将放入根项目中的
src/main/doc resources/com/someone/thing

即使不是scaladoc内置的,也可以工作。非常感谢。伟大的我们都在学习sbt!如果时间允许,请接受答案。谢谢