2016-08-23 7 views
0

Ich habe ein Kind-Java-Projekt, das Groovy-Dateien in Classpath mit Eclipse hinzugefügt hat. Übergeordnetes Java-Projekt löst einige Funktionen in child aus, die die Groovy-Bibliothek zum Ausführen der Skripts verwenden. So import funktioniert gut in Eclipse-Umgebung mit geöffneten Kind-Projekt, aber wenn ich es über die Befehlszeile ausführen oder wenn ich untergeordnete Projekt schließen, dann bekomme ich groovy Kompilierung Fehler bei Import-Anweisung. Wie kann ich das beheben? Ich möchte vermeiden, evaluate() Methode zu verwenden.Importieren einer Groovy-Datei von einem Paket in eine andere Groovy-Datei in einem anderen Paket

Es folgt mein Meister groovy:

package strides_business_script 
abstract class Business_Script extends Script { 
//some stuff 
} 

Nach der andere groovy ist:

import static strides_business_script.StridesBusiness_Script.*; 
import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 

String Key = Part_Product_PartDetails 
boolean containsData = checkIncomingMessage(Key) 
if(containsData) { 

    def edgeKeyList = [PPR] 
    JSONArray partDetails = appendEdgeValueToMsg(edgeKeyList,Key,vertex,messageIterator); 
    //deleteMessages(Key); 
    JSONObject jsonObject = constructInfoWithPropertyJSON("NAME,PRODUCTTYPE,FGTYPE,UOM,ITEMCLASSIFICATIONBYMARKET"); 
    jsonObject.put("PARTS",partDetails); 
    send(Product_AggPO_ProductDetails,convertJSONToString(jsonObject)); 

} 

Edit: Mein Meister Skript Business_Script.groovy in scripts/strides_business_script/ Ordner befindet. Alle anderen Skripte sind in scripts/StridesComputationScripts/ Ordner und sie importieren die Business_Script.groovy. Ich betreibe die Anwendung mit Remote-Debugging wie folgt aktiviert:

java -cp "./lib/*:./scripts/strides_business_script/Business_Script.groovy" -Xdebug -Xrunjdwp:transport=dt_socket,address=6969,server=y -Dhibernate.cfg.xml.path=./conf/hibernate.cfg.xml -Dlog4j.configuration=file:./conf/log4j.properties com.biglabs.dataExtractor.dataDump.DataDumpDriver 7 

und hier versuche ich, alle Rechen Skripte zu analysieren.

for (String scriptName : files) { 
         Script script = groovyShell.parse(new File(
           SCRIPT_PLACED_AT + Constants.SLASH 
             + SCRIPT_FILE_FOLDER + Constants.SLASH 
             + scriptName)); 
         scriptMping.put(scriptName, script); 
        } 

Es wirft folgende Ausnahme bei der Verwendung von groovy Shell-Analyse:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
/home/manoj/strides/release/strides/scripts/StridesComputationScripts/PRODUCT-script.groovy: 2: unable to resolve class strides_business_script.StridesBusiness_Script 
@ line 2, column 1. 
    import static strides_business_script.Business_Script.*; 
^

/home/manoj/strides/release/strides/scripts/StridesComputationScripts/PRODUCT-script.groovy: 2: unable to resolve class strides_business_script.StridesBusiness_Script 
@ line 2, column 1. 
    import static strides_business_script.Business_Script.*; 
^

2 errors 
+0

Wie werden Sie bauen oder aus dem Befehl ausführen Linie? Benutzt du ein Werkzeug wie Maven oder Gradle? –

+0

Build verwendet maven. Und ich starte es mit java -cp von der Kommandozeile. Versucht, den Speicherort der Groovy-Datei als Classpath anzugeben, hat aber nicht funktioniert. –

+0

Ich habe keine Ahnung, wie man reproduziert, was Sie haben ... Könnten Sie Ihre Frage aktualisieren, so dass wir es ausprobieren können? –

Antwort

0

es behoben, durch Skriptpfad in comiler Konfiguration hinzufügen:

CompilerConfiguration compilerConfiguration = new CompilerConfiguration(); 
String path = SCRIPT_PLACED_AT; 
if(!SCRIPT_PLACED_AT.endsWith("/")){ 
         path = path+ "/"; 
        } 
compilerConfiguration.setClasspath(path); 
GroovyShell groovyShell = new GroovyShell(
          compilerConfiguration); 
for (String scriptName : files) { 
         Script script = groovyShell.parse(new File(
           SCRIPT_PLACED_AT + Constants.SLASH 
             + SCRIPT_FILE_FOLDER + Constants.SLASH 
             + scriptName)); 
         scriptMping.put(scriptName, script); 
        } 
Verwandte Themen