Software Secret Weapons™


 
scala.tools.nsc.FatalError: object scala not found
by Pavel Simakov on 2008-03-20 20:02:31 under Lambda, view comments
Bookmark and Share
 


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.

Comments (2)

  • Comment by safaa akkar — December 15, 2008 @ 5:33 pm

    it’s very interessant

  • Comment by AR — April 17, 2010 @ 8:42 pm

    Thank you for this post, it saved me time. Ant is the most brain-dead piece of open-source software I've ever seen in wide usage.


Leave a comment


 
Dog Emotional 2010 Calendar Dog Emotional Mousepad Dog Fashionable 2010 Calendar Dog Fashionable Mousepad

Copyright © 2004-2010 by Pavel Simakov
any conclusions, recommendations, ideas, thoughts or the source code presented on this site are my own and do not reflect a official opinion of my current or past employers, partners or clients
SourceForge.net Logo