2015-10-06 91 views
1

當執行一個gradle任務時,我得到一個ClassNotFoundException: org.apache.ivy.core.report.ResolveReport,它使用Grapes來解決依賴關係。Gradle在GroovyShell中使用Eclipse執行Groovy腳本Luna

我使用Eclipse的月神4.4.0如果是本的build.gradle一個搖籃/ Groovy項目

apply plugin: 'groovy' 
apply plugin:'application' 

mainClassName = "de.my.app.package.Main" 
version = 0.5 

repositories { mavenCentral() } 

dependencies { 
    compile 'org.codehaus.groovy:groovy-all:2.4.3' 
    compile group: 'org.apache.ivy', name:'ivy', version:'2.2.0' 
    compile 'commons-io:commons-io:2.4' 
    compile 'commons-codec:commons-codec:1.2' 
} 

task myTask << { 
    def groovyShell = new GroovyShell() 
    groovyShell.run(file('/src/scripts/groovy/de/my/app/package/scripts/SomeScript.groovy')) 
} 
classes.finalizedBy(myTask) 

Java Build PathProject->Properties看起來是這樣的: enter image description here

這是SomeScript.groovy裏面的文件夾/src/scripts/groovy/de/my/app/package/scripts

package de.my.app.package.scripts 
@Grapes(
@Grab(group='org.eclipse.birt.runtime.3_7_1', module='org.apache.commons.codec', version='1.3.0') 
) 
@Grapes(
@Grab(group='commons-io', module='commons-io', version='2.4') 
) 
import org.apache.commons.codec.binary.Hex 
println Hex.toString() 

奇怪的是,從cmdgroovy SomeScript.groovy執行SomeScript.groovy不給錯誤。所以我猜測這是我錯過的一些Eclipse配置。

SomeScript.groovybuild.gradle可以執行SomeScript.groovy而不會導致ClassNotFoundException: org.apache.ivy.core.report.ResolveReport

回答

1

我找到了解決方案,我的問題。我需要這個build.gradle文件:

apply plugin: 'groovy' 
apply plugin:'application' 

mainClassName = "de.my.app.package.Main" 
version = 0.5 

repositories { mavenCentral() } 

dependencies { 
    compile 'org.codehaus.groovy:groovy-all:2.4.3' 
    compile group: 'org.apache.ivy', name:'ivy', version:'2.2.0' 
    compile 'commons-io:commons-io:2.4' 
    compile 'commons-codec:commons-codec:1.2' 
} 

task myTask (type: Exec) { 
    def groovyHome = System.getenv("GROOVY_HOME") 
    def someScriptPath= new String(project.projectDir.toString()).toString() + "\\src\\scripts\\groovy\\de\\my\\app\\package\\main\\SomeScript.groovy" 
    commandLine "${groovyHome}\\bin\\groovy.bat", someScriptPath 
} 
classes.finalizedBy(myTask) 

所以我放棄了使用類GroovyShell,因爲我無法正確地爲其配置類路徑的方法。

我的腳本在每次運行之前立即執行。問題解決了。