davidB / scala-maven-plugin

The scala-maven-plugin (previously maven-scala-plugin) is used for compiling/testing/running/documenting scala code in maven.
https://davidb.github.io/scala-maven-plugin/
The Unlicense
560 stars 151 forks source link

Could you add ability to use new version Scaladoc with old version Scala dependency? #499

Closed ReviveChan closed 2 years ago

ReviveChan commented 3 years ago

I'm using scala 2.11. Due to unsupported by some dependencies like flink or spark, I can't upgrade my scala version to newer version 2.13.

However I really like the new scaladoc style.

I tried to install scala 2.13 and just use its scaladoc to create my doc website through command line:

scaladoc -version # shows "Scaladoc version 2.13.6"
scaladoc -d doc/ src/main/scala/**/*scala

Then a 2.13 style scaladoc website was created.

So I think maybe it's ok to only use new version Scaladoc to create a doc-jar, without upgrading the whole Scala version in my project? Could scala-maven-plugin supports this usage?

davidB commented 3 years ago

Hi, not tested myself, but you could try to configure the goal scala:doc with an other version of scala. something like (need some tuning)

      <plugin>
        <artifactId>scala-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>execution1</id>
            <goals>
              <goal>doc</goal>
            </goals>
            <configuration>
              <scalaVersion>2.13.6</scalaVersion>
            </configuration>
          </execution>
ReviveChan commented 3 years ago

Thanks for your reply :)

I have tried to add the scalaVersion with 2.13.6, but it failed while running mvn scala:doc

I tried keep the scala-library version in maven dependencies with 2.11.12, or change it to 2.13.6, both failed. Error messages in that two situations are different.

However, I’m away from my computer now and I can’t remember the error details… I will run that again tomorrow.

ReviveChan commented 3 years ago

This is the error message shown.

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at scala_maven_executions.MainHelper.runMain(MainHelper.java:157)
    at scala_maven_executions.MainWithArgsInFile.main(MainWithArgsInFile.java:28)
Caused by: java.lang.NoSuchMethodError: scala.collection.mutable.Set$.apply(Lscala/collection/Seq;)Lscala/collection/GenTraversable;
    at org.apache.flink.api.scala.codegen.TypeAnalyzer$class.$init$(TypeAnalyzer.scala:37)
    at org.apache.flink.api.scala.codegen.MacroContextHolder$$anon$1.<init>(MacroContextHolder.scala:30)
    at org.apache.flink.api.scala.codegen.MacroContextHolder$.newMacroHelper(MacroContextHolder.scala:30)
    at org.apache.flink.api.scala.typeutils.TypeUtils$.createTypeInfo(TypeUtils.scala:30)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at scala.reflect.macros.runtime.JavaReflectionRuntimes$JavaReflectionResolvers.$anonfun$resolveJavaReflectionRuntime$6(JavaReflectionRuntimes.scala:51)
    at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime(Macros.scala:770)
    at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime$(Macros.scala:746)
    at scala.tools.nsc.doc.ScaladocGlobal$$anon$4.macroExpandWithRuntime(ScaladocGlobal.scala:59)
    at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:576)
    at scala.tools.nsc.Global.withInfoLevel(Global.scala:228)
    at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:569)
    at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:556)
    at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:731)
    at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:729)
    at scala.tools.nsc.doc.ScaladocGlobal$$anon$4.standardMacroExpand(ScaladocGlobal.scala:59)
    at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$11.default(AnalyzerPlugins.scala:473)
    at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$11.default(AnalyzerPlugins.scala:470)
    at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:427)
    at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:470)
    at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:470)
    at scala.tools.nsc.doc.ScaladocGlobal$$anon$4.pluginsMacroExpand(ScaladocGlobal.scala:59)
    at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:720)
    at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:713)
    at scala.tools.nsc.doc.ScaladocGlobal$$anon$4.macroExpand(ScaladocGlobal.scala:59)
    at scala.tools.nsc.typechecker.Macros$$anon$4.transform(Macros.scala:909)
    at scala.tools.nsc.typechecker.Macros.macroExpandAll(Macros.scala:917)
    at scala.tools.nsc.typechecker.Macros.macroExpandAll$(Macros.scala:898)
    at scala.tools.nsc.doc.ScaladocGlobal$$anon$4.macroExpandAll(ScaladocGlobal.scala:59)
    at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime(Macros.scala:755)
    at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime$(Macros.scala:746)
    at scala.tools.nsc.doc.ScaladocGlobal$$anon$4.macroExpandWithRuntime(ScaladocGlobal.scala:59)
    at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:576)
    at scala.tools.nsc.Global.withInfoLevel(Global.scala:228)
    at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:569)
    at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:556)
    at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:731)
    at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:729)
    at scala.tools.nsc.doc.ScaladocGlobal$$anon$4.standardMacroExpand(ScaladocGlobal.scala:59)
    at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$11.default(AnalyzerPlugins.scala:473)
    at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$11.default(AnalyzerPlugins.scala:470)
    at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:427)
    at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:470)
    at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:470)
    at scala.tools.nsc.doc.ScaladocGlobal$$anon$4.pluginsMacroExpand(ScaladocGlobal.scala:59)
    at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:720)
    at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:713)
    at scala.tools.nsc.doc.ScaladocGlobal$$anon$4.macroExpand(ScaladocGlobal.scala:59)
    at scala.tools.nsc.typechecker.Macros$DefMacroExpander.onDelayed(Macros.scala:703)
    at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:590)
    at scala.tools.nsc.Global.withInfoLevel(Global.scala:228)
    at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:569)
    at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:556)
    at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:731)
    at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:729)
    at scala.tools.nsc.doc.ScaladocGlobal$$anon$4.standardMacroExpand(ScaladocGlobal.scala:59)
    at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$11.default(AnalyzerPlugins.scala:473)
    at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$11.default(AnalyzerPlugins.scala:470)
    at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:427)
    at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:470)
    at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:470)
    at scala.tools.nsc.doc.ScaladocGlobal$$anon$4.pluginsMacroExpand(ScaladocGlobal.scala:59)
    at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:720)
    at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:713)
    at scala.tools.nsc.doc.ScaladocGlobal$$anon$4.macroExpand(ScaladocGlobal.scala:59)
    at scala.tools.nsc.typechecker.Typers$Typer.vanillaAdapt$1(Typers.scala:1209)
    at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1278)
    at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1251)
    at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1271)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6056)
    at scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:6318)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5950)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6041)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6119)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$8(Typers.scala:3410)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3410)
    at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:2064)
    at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1895)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5951)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6041)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6119)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$8(Typers.scala:3410)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3410)
    at scala.tools.nsc.typechecker.Typers$Typer.typedBlock(Typers.scala:2564)
    at scala.tools.nsc.typechecker.Typers$Typer.typedOutsidePatternMode$1(Typers.scala:5960)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5995)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6041)
    at scala.tools.nsc.typechecker.Typers$Typer.typedArg(Typers.scala:3428)
    at scala.tools.nsc.typechecker.Typers$Typer.typedArg0$1(Typers.scala:3536)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$doTypedApply$7(Typers.scala:3555)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$doTypedApply$6(Typers.scala:3534)
    at scala.tools.nsc.typechecker.Contexts$Context.savingUndeterminedTypeParams(Contexts.scala:537)
    at scala.tools.nsc.typechecker.Typers$Typer.handleOverloaded$1(Typers.scala:3531)
    at scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:3583)
    at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:5095)
    at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:5104)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5985)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6041)
    at scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:6318)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5950)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6041)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6119)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$8(Typers.scala:3410)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3410)
    at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:2064)
    at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1895)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5951)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6041)
    at scala.tools.nsc.typechecker.Typers$Typer.typedDocDef(Typers.scala:239)
    at scala.tools.nsc.doc.ScaladocAnalyzer$$anon$1.scala$tools$nsc$doc$ScaladocAnalyzer$ScaladocTyper$$super$typedDocDef(ScaladocAnalyzer.scala:26)
    at scala.tools.nsc.doc.ScaladocAnalyzer$ScaladocTyper.typedDocDef(ScaladocAnalyzer.scala:58)
    at scala.tools.nsc.doc.ScaladocAnalyzer$ScaladocTyper.typedDocDef$(ScaladocAnalyzer.scala:37)
    at scala.tools.nsc.doc.ScaladocAnalyzer$$anon$1.typedDocDef(ScaladocAnalyzer.scala:26)
    at scala.tools.nsc.typechecker.Typers$Typer.typedOutsidePatternMode$1(Typers.scala:5977)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5995)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6041)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6119)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$8(Typers.scala:3410)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3410)
    at scala.tools.nsc.typechecker.Typers$Typer.typedPackageDef$1(Typers.scala:5634)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5954)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6041)
    at scala.tools.nsc.typechecker.Analyzer$typerFactory$TyperPhase.apply(Analyzer.scala:112)
    at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:454)
    at scala.tools.nsc.typechecker.Analyzer$typerFactory$TyperPhase.run(Analyzer.scala:101)
    at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1519)
    at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1503)
    at scala.tools.nsc.Global$Run.compileSources(Global.scala:1495)
    at scala.tools.nsc.Global$Run.compile(Global.scala:1630)
    at scala.tools.nsc.doc.DocFactory.makeUniverse(DocFactory.scala:54)
    at scala.tools.nsc.doc.DocFactory.generate$1(DocFactory.scala:135)
    at scala.tools.nsc.doc.DocFactory.document(DocFactory.scala:142)
    at scala.tools.nsc.ScalaDoc.process(ScalaDoc.scala:48)
    at scala.tools.nsc.ScalaDoc$.main(ScalaDoc.scala:99)
    at scala.tools.nsc.ScalaDoc.main(ScalaDoc.scala)
    ... 6 more

It seems like the signatures of mutable.Set.apply in 2.11 and 2.13 are different, which causes the NoSuchMethodError. But I don't know why the error occurred only with mvn scala:doc...

This is the maven configuration

      <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>4.5.3</version>
        <executions>
          <execution>
            <id>scaladoc</id>
            <goals>
              <goal>doc</goal>
            </goals>
            <configuration>
              <scalaVersion>2.13.6</scalaVersion>
            </configuration>
          </execution>
        </executions>
      </plugin>
ReviveChan commented 3 years ago

And it's ok with the scalaVersion 2.12.14

            <configuration>
              <scalaVersion>2.12.14</scalaVersion>
            </configuration>
slandelle commented 2 years ago

Closing. I don't think this is something we'll ever tackle.