I am new to scala and this forum. I have a project which has scala and java modules. I am trying to generate scala documentation for the entire project using IntelliJ Idea Community Edition.
I have defined the following dependency in my maven file. Is it the version incompatibility?
When I run scaladoc, it throws the following error. Can someone please help?
"C:\Program Files\Java\jdk1.8.0_45\bin\java" "-javaagent:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\idea_rt.jar=59038:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\bin" -classpath "C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\idea_rt.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\util.jar" -Dfile.encoding=UTF-8 com.intellij.rt.execution.CommandLineWrapper C:\Users\ritwik\AppData\Local\Temp\idea_classpath scala.tools.nsc.ScalaDoc @C:\Users\RITWIK~1\AppData\Local\Temp\scaladocfileargs613953797411499296.tmp
Exception in thread "main" 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:497)
at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:65)
Caused by: java.lang.AbstractMethodError: scala.reflect.internal.settings.MutableSettings.strictInference()Lscala/reflect/internal/settings/MutableSettings$SettingValue;
at scala.reflect.internal.tpe.GlbLubs$class.$init$(GlbLubs.scala:17)
at scala.reflect.internal.SymbolTable.<init>(SymbolTable.scala:16)
at scala.tools.nsc.symtab.SymbolTable.<init>(SymbolTable.scala:9)
at scala.tools.nsc.Global.<init>(Global.scala:36)
at scala.tools.nsc.doc.DocFactory$compiler$.<init>(DocFactory.scala:36)
at scala.tools.nsc.doc.DocFactory.compiler$lzycompute(DocFactory.scala:36)
at scala.tools.nsc.doc.DocFactory.compiler(DocFactory.scala:36)
at scala.tools.nsc.doc.DocFactory.makeUniverse(DocFactory.scala:57)
at scala.tools.nsc.doc.DocFactory.generate$1(DocFactory.scala:125)
at scala.tools.nsc.doc.DocFactory.document(DocFactory.scala:137)
at scala.tools.nsc.ScalaDoc.process(ScalaDoc.scala:49)
at scala.tools.nsc.ScalaDoc$.main(ScalaDoc.scala:75)
at scala.tools.nsc.ScalaDoc.main(ScalaDoc.scala)
... 5 more
When I change scala-reflect to version 2.12.1, the error changes to the following:
"C:\Program Files\Java\jdk1.8.0_45\bin\java" "-javaagent:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\idea_rt.jar=61629:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\bin" -classpath "C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\idea_rt.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\util.jar" -Dfile.encoding=UTF-8 com.intellij.rt.execution.CommandLineWrapper C:\Users\ritwik\AppData\Local\Temp\idea_classpath scala.tools.nsc.ScalaDoc @C:\Users\RITWIK~1\AppData\Local\Temp\scaladocfileargs2851192433360025564.tmp
Exception in thread "main" 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:497)
at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:65)
Caused by: java.lang.NoSuchMethodError: scala.collection.GenTraversableOnce.$init$(Lscala/collection/GenTraversableOnce;)V
at scala.reflect.io.AbstractFile.<init>(AbstractFile.scala:90)
at scala.reflect.io.PlainFile.<init>(PlainFile.scala:21)
at scala.reflect.io.AbstractFile$.getDirectory(AbstractFile.scala:45)
at scala.reflect.io.AbstractFile$.getDirectory(AbstractFile.scala:37)
at scala.tools.nsc.settings.MutableSettings$OutputDirs.setSingleOutput(MutableSettings.scala:269)
at scala.tools.nsc.settings.MutableSettings$OutputSetting.value_$eq(MutableSettings.scala:515)
at scala.tools.nsc.settings.MutableSettings$OutputSetting.<init>(MutableSettings.scala:512)
at scala.tools.nsc.settings.MutableSettings.OutputSetting(MutableSettings.scala:221)
at scala.tools.nsc.settings.ScalaSettings$class.$init$(ScalaSettings.scala:64)
at scala.tools.nsc.settings.MutableSettings.<init>(MutableSettings.scala:19)
at scala.tools.nsc.Settings.<init>(Settings.scala:12)
at scala.tools.nsc.doc.Settings.<init>(Settings.scala:16)
at scala.tools.nsc.ScalaDoc.process(ScalaDoc.scala:23)
at scala.tools.nsc.ScalaDoc$.main(ScalaDoc.scala:75)
at scala.tools.nsc.ScalaDoc.main(ScalaDoc.scala)
... 5 more
Also, I can’t think of a reason why you would use 2.11.1 when there is
2.11.11 (same for 2.10., though I haven’t checked what the latest 2.10.
version is).
Any particular reason why you don’t use 2.11.11 throughout?
@curoli, the reason I have the scala-library as 2.10.5 is because it is an existing code in production that was written some time back. I am supposed to document/generate scaladocs on it. Hence, changing the version for the library might not be something I would be allowed till we know that is the only reason.
I did however, try to change all versions to 2.11.11 in my local environment, and got a different error:
“C:\Program Files\Java\jdk1.8.0_45\bin\java” “-javaagent:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\idea_rt.jar=55139:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\bin” -classpath “C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\idea_rt.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2017.1\lib\util.jar” -Dfile.encoding=UTF-8 com.intellij.rt.execution.CommandLineWrapper C:\Users\ritwik\AppData\Local\Temp\idea_classpath scala.tools.nsc.ScalaDoc @C:\Users\RITWIK~1\AppData\Local\Temp\scaladocfileargs53980598388621493.tmp
Exception in thread “main” 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:497)
at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:65)
Caused by: java.lang.NoClassDefFoundError: scala/reflect/io/PlainFile$
at scala.tools.nsc.io.package$.(package.scala:24)
at scala.tools.nsc.io.package$.(package.scala)
at scala.tools.nsc.util.ClassPath$.join(ClassPath.scala:52)
at scala.tools.nsc.settings.MutableSettings$PathSetting.value(MutableSettings.scala:500)
at scala.tools.nsc.settings.MutableSettings$PathSetting.value(MutableSettings.scala:489)
at scala.tools.nsc.settings.AbsSettings$AbsSetting$class.hashCode(AbsSettings.scala:135)
at scala.tools.nsc.settings.MutableSettings$Setting.hashCode(MutableSettings.scala:347)
at scala.collection.mutable.FlatHashTable$class.addEntry(FlatHashTable.scala:151)
at scala.collection.mutable.HashSet.addEntry(HashSet.scala:40)
at scala.collection.mutable.FlatHashTable$class.addElem(FlatHashTable.scala:142)
at scala.collection.mutable.HashSet.addElem(HashSet.scala:40)
at scala.collection.mutable.HashSet.$plus$eq(HashSet.scala:59)
at scala.tools.nsc.settings.MutableSettings.add(MutableSettings.scala:212)
at scala.tools.nsc.settings.MutableSettings.PathSetting(MutableSettings.scala:228)
at scala.tools.nsc.settings.MutableSettings.PathSetting(MutableSettings.scala:19)
at scala.tools.nsc.settings.StandardScalaSettings$class.$init$(StandardScalaSettings.scala:21)
at scala.tools.nsc.settings.MutableSettings.(MutableSettings.scala:19)
at scala.tools.nsc.Settings.(Settings.scala:12)
at scala.tools.nsc.doc.Settings.(Settings.scala:16)
at scala.tools.nsc.ScalaDoc.process(ScalaDoc.scala:23)
at scala.tools.nsc.ScalaDoc$.main(ScalaDoc.scala:75)
at scala.tools.nsc.ScalaDoc.main(ScalaDoc.scala)
… 5 more
Caused by: java.lang.ClassNotFoundException: scala.reflect.io.PlainFile$
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
… 27 more
It looks like your code is expecting a class scala.reflect.io.PlainFile
and it does not exist. Probably, it existed in 2.10 and was removed in
2.11. Try everything in 2.10 or rewrite your code.
@Jasper-M, @curoli - I do want to remain in 2.10.5. But when I run scaladoc on the code, it throws some error stating they require scala-reflect. My question, does scaladoc require scala-reflect.
This error is thrown when an application tries to call an abstract method without actual implementation. Abstract methods have no body and cannot be executed. This error can only occur at run time if the definition of some class has incompatibly changed since the currently executing method was last compiled. It usually happens after some library is upgraded while some is not. The dependencies are missing somehow. This means that you are using an old java version of an interface implementation which is missing a new interface method. For example java.sql.Connection interface got a new getSchema method in 1.7. If you have 1.6 JDBC driver and call Connection.getSchema you will get AbstractMethodError. So, make sure you have the latest jar file in your class path not a older copy.