Skip to content

Scala doc fails to generate static site #15306

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
nicolasfara opened this issue May 28, 2022 · 2 comments · Fixed by #17297
Closed

Scala doc fails to generate static site #15306

nicolasfara opened this issue May 28, 2022 · 2 comments · Fixed by #17297

Comments

@nicolasfara
Copy link

nicolasfara commented May 28, 2022

Compiler version

3.1.2

Minimized code

A minimal repo created accoring to the scaladoc documentation.
Link to example repo: https://github.com/nicolasfara/scaladoc-test

Output

When -siteroot is set to:

  • ./docs the sbt doc task is successful but the files in docs/_docs/ are ignored
  • docs or docs/ the sbt doc task fails with the following exception:
Stack trace
[error] java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
[error] 	at xsbt.DottydocRunner.run(DottydocRunner.java:65)
[error] 	at xsbt.ScaladocInterface.run(ScaladocInterface.java:11)
[error] 	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
[error] 	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
[error] 	at sbt.internal.inc.AnalyzingCompiler.invoke(AnalyzingCompiler.scala:329)
[error] 	at sbt.internal.inc.AnalyzingCompiler.doc(AnalyzingCompiler.scala:175)
[error] 	at sbt.internal.inc.AnalyzingCompiler.doc(AnalyzingCompiler.scala:133)
[error] 	at sbt.Doc$.$anonfun$scaladoc$1(Doc.scala:52)
[error] 	at sbt.Doc$.$anonfun$scaladoc$1$adapted(Doc.scala:40)
[error] 	at sbt.RawCompileLike$.$anonfun$prepare$1(RawCompileLike.scala:79)
[error] 	at sbt.RawCompileLike$.$anonfun$prepare$1$adapted(RawCompileLike.scala:72)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$4(RawCompileLike.scala:63)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$4$adapted(RawCompileLike.scala:61)
[error] 	at sbt.util.Tracked$.$anonfun$inputChangedW$1(Tracked.scala:219)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$1(RawCompileLike.scala:68)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$1$adapted(RawCompileLike.scala:52)
[error] 	at sbt.Defaults$.$anonfun$docTaskSettings$4(Defaults.scala:2159)
[error] 	at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] 	at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error] 	at sbt.std.Transform$$anon$4.work(Transform.scala:68)
[error] 	at sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error] 	at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error] 	at sbt.Execute.work(Execute.scala:291)
[error] 	at sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error] 	at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] 	at sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[error] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
[error] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[error] 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[error] 	at java.base/java.lang.Thread.run(Thread.java:833)
[error] Caused by: java.lang.reflect.InvocationTargetException
[error] 	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:119)
[error] 	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
[error] 	at xsbt.DottydocRunner.run(DottydocRunner.java:61)
[error] 	at xsbt.ScaladocInterface.run(ScaladocInterface.java:11)
[error] 	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
[error] 	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
[error] 	at sbt.internal.inc.AnalyzingCompiler.invoke(AnalyzingCompiler.scala:329)
[error] 	at sbt.internal.inc.AnalyzingCompiler.doc(AnalyzingCompiler.scala:175)
[error] 	at sbt.internal.inc.AnalyzingCompiler.doc(AnalyzingCompiler.scala:133)
[error] 	at sbt.Doc$.$anonfun$scaladoc$1(Doc.scala:52)
[error] 	at sbt.Doc$.$anonfun$scaladoc$1$adapted(Doc.scala:40)
[error] 	at sbt.RawCompileLike$.$anonfun$prepare$1(RawCompileLike.scala:79)
[error] 	at sbt.RawCompileLike$.$anonfun$prepare$1$adapted(RawCompileLike.scala:72)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$4(RawCompileLike.scala:63)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$4$adapted(RawCompileLike.scala:61)
[error] 	at sbt.util.Tracked$.$anonfun$inputChangedW$1(Tracked.scala:219)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$1(RawCompileLike.scala:68)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$1$adapted(RawCompileLike.scala:52)
[error] 	at sbt.Defaults$.$anonfun$docTaskSettings$4(Defaults.scala:2159)
[error] 	at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] 	at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error] 	at sbt.std.Transform$$anon$4.work(Transform.scala:68)
[error] 	at sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error] 	at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error] 	at sbt.Execute.work(Execute.scala:291)
[error] 	at sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error] 	at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] 	at sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[error] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
[error] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[error] 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[error] 	at java.base/java.lang.Thread.run(Thread.java:833)
[error] Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayList<dotty.tools.scaladoc.site.Sidebar$RawInput>` from String value (token `JsonToken.VALUE_STRING`)
[error]  at [Source: (StringReader); line: 1, column: 8] (through reference chain: java.util.LinkedHashMap["index"])
[error] 	at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
[error] 	at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1601)
[error] 	at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1375)
[error] 	at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1322)
[error] 	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:384)
[error] 	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromString(CollectionDeserializer.java:318)
[error] 	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:250)
[error] 	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:28)
[error] 	at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringKeyMap(MapDeserializer.java:609)
[error] 	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:437)
[error] 	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:32)
[error] 	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
[error] 	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)
[error] 	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3548)
[error] 	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3531)
[error] 	at dotty.tools.scaladoc.site.Sidebar$.load(SidebarParser.scala:34)
[error] 	at dotty.tools.scaladoc.site.StaticSiteContext.sideBarConfig(StaticSiteContext.scala:48)
[error] 	at dotty.tools.scaladoc.site.StaticSiteContext.templates(StaticSiteContext.scala:51)
[error] 	at dotty.tools.scaladoc.renderers.Renderer.<init>(Renderer.scala:43)
[error] 	at dotty.tools.scaladoc.renderers.HtmlRenderer.<init>(HtmlRenderer.scala:19)
[error] 	at dotty.tools.scaladoc.Scaladoc$.run(Scaladoc.scala:249)
[error] 	at dotty.tools.scaladoc.Scaladoc$.run$$anonfun$1(Scaladoc.scala:84)
[error] 	at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] 	at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] 	at scala.Option.map(Option.scala:242)
[error] 	at dotty.tools.scaladoc.Scaladoc$.run(Scaladoc.scala:88)
[error] 	at dotty.tools.dottydoc.Main$.process(Main.scala:25)
[error] 	at dotty.tools.dottydoc.Main.process(Main.scala)
[error] 	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
[error] 	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
[error] 	at xsbt.DottydocRunner.run(DottydocRunner.java:61)
[error] 	at xsbt.ScaladocInterface.run(ScaladocInterface.java:11)
[error] 	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
[error] 	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
[error] 	at sbt.internal.inc.AnalyzingCompiler.invoke(AnalyzingCompiler.scala:329)
[error] 	at sbt.internal.inc.AnalyzingCompiler.doc(AnalyzingCompiler.scala:175)
[error] 	at sbt.internal.inc.AnalyzingCompiler.doc(AnalyzingCompiler.scala:133)
[error] 	at sbt.Doc$.$anonfun$scaladoc$1(Doc.scala:52)
[error] 	at sbt.Doc$.$anonfun$scaladoc$1$adapted(Doc.scala:40)
[error] 	at sbt.RawCompileLike$.$anonfun$prepare$1(RawCompileLike.scala:79)
[error] 	at sbt.RawCompileLike$.$anonfun$prepare$1$adapted(RawCompileLike.scala:72)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$4(RawCompileLike.scala:63)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$4$adapted(RawCompileLike.scala:61)
[error] 	at sbt.util.Tracked$.$anonfun$inputChangedW$1(Tracked.scala:219)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$1(RawCompileLike.scala:68)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$1$adapted(RawCompileLike.scala:52)
[error] 	at sbt.Defaults$.$anonfun$docTaskSettings$4(Defaults.scala:2159)
[error] 	at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] 	at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error] 	at sbt.std.Transform$$anon$4.work(Transform.scala:68)
[error] 	at sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error] 	at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error] 	at sbt.Execute.work(Execute.scala:291)
[error] 	at sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error] 	at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] 	at sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[error] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
[error] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[error] 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[error] 	at java.base/java.lang.Thread.run(Thread.java:833)
[error] (Compile / doc) java.lang.reflect.InvocationTargetException
[IJ]

Expectation

I would expect the sbt doc task to generate the correct API documentation and render the files contained in docs/_docs.

@nicolasfara nicolasfara added itype:bug stat:needs triage Every issue needs to have an "area" and "itype" label labels May 28, 2022
@ndido98
Copy link

ndido98 commented May 29, 2022

Can reproduce the issue with 3.1.2. I also tried with 3.1.3-RC4 with the default site root (./docs) and the files in docs/_docs are ignored.
Also, I'm honestly puzzled about the substantial change in behavior between using ./docs and docs as the site root. Shouldn't they be the same?

@szymon-rd szymon-rd added area:doctool and removed stat:needs triage Every issue needs to have an "area" and "itype" label labels May 30, 2022
@pikinier20
Copy link
Contributor

There are few things going on there:

  • The refactor of YAML format and static site generation was done in 3.1.3. That's why on 3.1.2 the generation fails with exception that looks like YAML parsing error - the format was other then
  • In the YAML, you've got:
index: index.md
subsection:
  - title: Test

So you define a subsection and then in first element of array you provide only title. You need to define also page property with the path to page. I see that you don't have any other page, so probably you wanted do:

index: index.md
title: Test

but this is the root section so the title is always the name of project.

  • I don't know why the behavior differs between docs and ./docs but I will investigate that. Also, maybe we need to work on error messaging so that they're more useful.

ckipp01 pushed a commit that referenced this issue May 29, 2023
- For the first issue, when a user set ./docs to the default value of
ScalaSettings, the code only took a value that was not the default
`siteRoot.nonDefault`. To fix this, I put a getOrElse to try and get the
default value.


- For the second problem, I noticed when I cloned the code that the user
was calling layouts that did not exist. Be careful with this as it can
indeed produce an error. Solving this problem was enough to remove the
non-existent layout calls.

Fixes: #15306
@Kordyjan Kordyjan added this to the 3.4.0 milestone Aug 2, 2023
Kordyjan pushed a commit that referenced this issue Nov 17, 2023
- For the first issue, when a user set ./docs to the default value of
ScalaSettings, the code only took a value that was not the default
`siteRoot.nonDefault`. To fix this, I put a getOrElse to try and get the
default value.


- For the second problem, I noticed when I cloned the code that the user
was calling layouts that did not exist. Be careful with this as it can
indeed produce an error. Solving this problem was enough to remove the
non-existent layout calls.

Fixes: #15306
[Cherry-picked 4e4552e]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants