2016-04-07 5 views
1

Ich habe einen Jenkins-Job, der eine Maven-Build-Datei aufrufen, die ein grooviges Skript aufruft.Jenkins GMavenPlus Plugin kann nicht lokale Klasse in groovy Skript importieren

In Jenkins ich habe:

Maven version 3.0 
Goals and options: -U -P hudson gplus:execute 

Die Groovy-Skript die GMavenPlus aufgerufen wird. In der pom.xml habe ich

<plugin> 
    <groupId>org.codehaus.gmavenplus</groupId> 
    <artifactId>gmavenplus-plugin</artifactId> 
    <version>1.5</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>execute</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration>     
     <scripts>      
      <script> 
       file:///${project.basedir}/src/main/java/com/mycompany/testImport.groovy 
      </script> 
     </scripts> 
    </configuration> 
</plugin> 

, die den testImport.groovy Skript ruft:

println "Hello from testImport" 
importedClass = new ImportedClass() 
importedClass.hello() 

Dieses Skript ein weiteres starkes Skript schließen versucht, ImportedClass.groovy, die ein einziges hat Methode:

class ImportedClass { 
def hello() { 
    println("Hello from imported class") 
} 

}

Das Skript testImport wird korrekt aufgerufen, und ich habe alles funktioniert, aber es scheint ein Problem zu bestehen, während ich versuche, einen Import für die importierte Klasse zu verwenden.

Ich habe diesen Fehler in der Konsole Jenkins erscheint

[ERROR] Failed to execute goal org.codehaus.gmavenplus:gmavenplus-plugin:1.5:execute (default-cli) on project com.mycompany: Error occurred while calling a method on a Groovy class from classpath. InvocationTargetException: startup failed: 
[ERROR] Script1.groovy: 3: unable to resolve class ImportedClass 
[ERROR] @ line 3, column 21. 
[ERROR] def importedClass = new ImportedClass() 
[ERROR]^
[ERROR] 
[ERROR] 1 error 
[ERROR] -> [Help 1] 

ich Pakete Setup Namen ausprobiert und verwendet auch bewerten aber immer mit diesem Fehler zu enden. Gibt es eine Möglichkeit, eine externe Groovy-Datei einzuschließen?

konnte ich durch die Verwendung dieser in der pom.xml arbeiten externe Abhängigkeiten haben:

<dependencies> 
    <dependency> 
     <groupId>org.codehaus.groovy.modules.http-builder</groupId> 
     <artifactId>http-builder</artifactId> 
     <version>0.7</version> 
    </dependency> 

Dann kann ich im groovy Code verwenden:

import groovyx.net.http.HTTPBuilder 
// and create instance of the class 
def httpBuilder = new HTTPBuilder("blablabla") 

Antwort

1

dieses Problem in GitHub Gefolgt https://github.com/groovy/GMavenPlus/issues/53

und implementiert den Vorschlag zur Verwendung:

def myDependentScript = new GroovyClassLoader().parseClass(new File("myScriptDependency.groovy")).newInstance() 

Es ist nicht schön sauber wie mit einem einfachen Import, aber nichtsdestoweniger funktioniert

Verwandte Themen