2016-03-06 6 views
5

mit Ich habe ein starkes Skript wie folgt:Erste Klasse nicht gefunden: org.apache.ivy.core.report.ResolveReport wenn GroovyClassLoader in Java

@Grab('com.univocity:univocity-parsers:2.0.0') 
import com.univocity.parsers.csv.*; 

class MyCsvParser { 

} 

Und ich will diese Klasse in meiner Java-Anwendung laden über GroovyClassLoader. Aber die @Grab ergibt irgendwie in einem mit Efeu Ausnahme:

SomeJavaClass { 
    void someMethod() { 
     String script = FileUtils.readFileToString("the groovy File"); 
     Class c = new GroovyClassLoader(this.getClass().getClassLoader())).parse(script); 
    } 
} 

Stack:

Caused by: java.lang.ClassNotFoundException: org.apache.ivy.core.report.ResolveReport 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 41 more 

Wenn ich kommentieren Sie die @Grab alles funktioniert gut. Wie kann ich die Trauben in GroovyClassLoader aktivieren?

+0

Diese Datei ist ein Teil von Apache Ivy-Framework - http://javasearch.buggybread.com/home.php?keyword=org.apache.ivy.core .report.ResolveReport –

Antwort

9

Sie sollten die Efeuabhängigkeit hinzufügen. Es wird nicht standardmäßig hinzugefügt, da es als nicht transitiv deklariert ist. Ivy ist die Bibliothek, die die Abhängigkeiten von @Grab geladen verwaltet:

<dependency> 
    <groupId>org.apache.ivy</groupId> 
    <artifactId>ivy</artifactId> 
    <version>2.4.0</version> 
</dependency>