package groovy class CompileOrderTest extends GroovyTestCase { public void testCompileOrder() { def interfaceFile = File.createTempFile("TestOrderInterface", ".groovy", new File("target")) def concreteFile = File.createTempFile("TestOrderConcrete", ".groovy", new File("target")) def cl = new GroovyClassLoader(this.class.classLoader); def currentDir = concreteFile.parentFile.absolutePath println currentDir cl.addClasspath(currentDir) cl.shouldRecompile = true try { // Create the interface println "a" interfaceFile.deleteOnExit() def interfaceName = interfaceFile.name - ".groovy" interfaceFile.write "interface $interfaceName { }\n" // Create a concrete class which implements the interface concreteFile.deleteOnExit() def concreteName = concreteFile.name - ".groovy" concreteFile.write "class $concreteName implements $interfaceName { }\n" // We're testing whether this fails: def groovyClass = cl.loadClass(concreteName,true,false) // Create an object, just for good measure. def object = groovyClass.newInstance() } finally { interfaceFile.delete() concreteFile.delete() } } }