Software Secret Weapons™  
scala.tools.nsc.FatalError: object scala not found posted by Pavel Simakov on 2008-03-20 20:02:31 under Lambda
view comments
 


I was playing with Scala today and hit this error while trying to compile Scala source file from Apache Ant <scalac /> task. Here the error stack:

[scalac] scala.tools.nsc.FatalError: object scala not found.
[scalac] at scala.tools.nsc.symtab.Definitions$definitions$.getModuleOrClass(Definitions.scala:363)
[scalac] at scala.tools.nsc.symtab.Definitions$definitions$.getModule(Definitions.scala:332)
[scalac] at scala.tools.nsc.symtab.Definitions$definitions$.ScalaPackage(Definitions.scala:34)
[scalac] at scala.tools.nsc.symtab.Definitions$definitions$.ScalaPackageClass(Definitions.scala:35)
[scalac] at scala.tools.nsc.symtab.Definitions$definitions$.init(Definitions.scala:664)
[scalac] at scala.tools.nsc.Global$Run.<init>(Global.scala:449)
[scalac] at scala.tools.ant.Scalac.execute(Scalac.scala:584)
[scalac] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
[scalac] at org.apache.tools.ant.Task.perform(Task.java:364)
[scalac] at org.apache.tools.ant.Target.execute(Target.java:341)
[scalac] at org.apache.tools.ant.Target.performTasks(Target.java:369)
[scalac] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
[scalac] at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
[scalac] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
[scalac] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
[scalac] at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
[scalac] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
[scalac] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)

The solution was quite easy to find. The example for <scalac /> task typically starts with <taskdef >:

<taskdef resource="scala/tools/ant/antlib.xml">
    <classpath>
        <pathelement location="${scala.home}/lib/scala-compiler.jar"/>
        <pathelement location="${scala.home}/lib/scala-library.jar"/>
    </classpath>
</taskdef>

And then you call <scalac /> like this:

<scalac srcdir="src-scala" destdir="build/scala" classpathref="my-classpath" force="changed">
    <include name="**/*.scala"/>
</scalac>

It turns out that the error above will show up if my-classpath does not have scala-compiler.jar and scala-library.jar specified on it. Because when you specify classpath parameter to <scalac /> task it overrides class path defined inside <taskdef /> rather then adds to it. So just add scala jars to your own class path.

This is it.

No comments yet


Leave a comment


  Copyright © 2004-2007 by Pavel Simakov SourceForge.net Logo