Skip to content

java.lang.IncompatibleClassChangeError upon invoking getClasses() on ClassFinder instance #19

@chipsenkbeil

Description

@chipsenkbeil

Hi there! Was checking out the library, which looks really nice. I added the dependency through Maven Central (using sbt 0.13.7) via libraryDependencies += "org.clapper" %% "classutil" % "1.0.5", so not sure if that would be an issue since the instructions reference bin-tray. I'm compiling with Scala 2.10.4, by the way.

Anyway, I seem to have encountered an exception when invoking mainClassFinder.getClasses() where mainClassFinder is a ClassFinder instance that is using the current classpath. I'm not sure if this is a problem from me adding the dependency from Maven central - FYI, I tried bin-tray afterwards with same result - or if it's an issue with my classpath or something else. Any guidance?

Code

import java.io.File
import org.clapper.classutil.{ClassInfo, ClassFinder}

class ModuleManager(extraClassPaths: Seq[String] = Nil) {
  private lazy val mainClassFinder: ClassFinder = ClassFinder()
  private lazy val extraClassFinder: Option[ClassFinder] = Option(
    if (extraClassPaths.nonEmpty) ClassFinder(extraClassPaths.map(new File(_)))
    else null
  )

  private lazy val allClasses = mainClassFinder.getClasses() ++
    extraClassFinder.map(_.getClasses()).getOrElse(Stream.empty[ClassInfo])
  private lazy val allClassMap =
    ClassFinder.classInfoMap(allClasses.toIterator)

  lazy val modules = ClassFinder.concreteSubclasses(
    classOf[ModuleLike].getName,
    allClassMap
  )

  modules.foreach(println)
}

Exception

Exception in thread "main" java.lang.IncompatibleClassChangeError: class org.clapper.classutil.asm.EmptyVisitor has interface org.objectweb.asm.ClassVisitor as super class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at org.clapper.classutil.asm.ClassFile$.load(ClassFinderImpl.scala:190)
    at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$classData(ClassFinder.scala:406)
    at org.clapper.classutil.ClassFinder$$anonfun$2.apply(ClassFinder.scala:364)
    at org.clapper.classutil.ClassFinder$$anonfun$2.apply(ClassFinder.scala:364)
    at scala.collection.immutable.Stream.map(Stream.scala:376)
    at org.clapper.classutil.ClassFinder.processOpenZip(ClassFinder.scala:364)
    at org.clapper.classutil.ClassFinder.processJar(ClassFinder.scala:318)
    at org.clapper.classutil.ClassFinder.findClassesIn(ClassFinder.scala:307)
    at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:299)
    at org.clapper.classutil.ClassFinder.getClasses(ClassFinder.scala:289)
    at com.ibm.spark.kernel.module.ModuleManager.allClasses$lzycompute(ModuleManager.scala:37)
    at com.ibm.spark.kernel.module.ModuleManager.allClasses(ModuleManager.scala:37)
    at com.ibm.spark.kernel.module.ModuleManager.allClassMap$lzycompute(ModuleManager.scala:40)
    at com.ibm.spark.kernel.module.ModuleManager.allClassMap(ModuleManager.scala:39)
    at com.ibm.spark.kernel.module.ModuleManager.modules$lzycompute(ModuleManager.scala:45)
    at com.ibm.spark.kernel.module.ModuleManager.modules(ModuleManager.scala:42)
    at com.ibm.spark.kernel.module.ModuleManager.<init>(ModuleManager.scala:48)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions