Gradle 使用 Eclipse Luna 在 GroovyShell 中执行 Groovy 脚本
Gradle execute Groovy script in GroovyShell with Eclipse Luna
我在执行 gradle 任务时收到 ClassNotFoundException: org.apache.ivy.core.report.ResolveReport
,该任务使用 Grapes
解决依赖关系。
我正在使用 Eclipse Luna 4.4.0 和一个 Gradle/Groovy 项目 有这个 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 << {
def groovyShell = new GroovyShell()
groovyShell.run(file('/src/scripts/groovy/de/my/app/package/scripts/SomeScript.groovy'))
}
classes.finalizedBy(myTask)
我的 Java Build Path
在 Project->Properties
里面看起来是这样的:
这是文件夹 /src/scripts/groovy/de/my/app/package/scripts
中的 SomeScript.groovy
:
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()
奇怪的是从 cmd
和 groovy SomeScript.groovy
执行 SomeScript.groovy
不会给出错误。所以我猜这是我错过的一些 Eclipse 配置。
SomeScript.groovy
如何被 build.gradle
中的 Gradle run
执行而不引起 ClassNotFoundException: org.apache.ivy.core.report.ResolveReport
?
我找到了解决问题的方法。我需要这个 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)
所以我放弃了使用 class GroovyShell
的方法,因为我无法为它正确配置 classPath。
我的脚本现在在每个 运行 之前执行。问题已解决。
我在执行 gradle 任务时收到 ClassNotFoundException: org.apache.ivy.core.report.ResolveReport
,该任务使用 Grapes
解决依赖关系。
我正在使用 Eclipse Luna 4.4.0 和一个 Gradle/Groovy 项目 有这个 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 << {
def groovyShell = new GroovyShell()
groovyShell.run(file('/src/scripts/groovy/de/my/app/package/scripts/SomeScript.groovy'))
}
classes.finalizedBy(myTask)
我的 Java Build Path
在 Project->Properties
里面看起来是这样的:
这是文件夹 /src/scripts/groovy/de/my/app/package/scripts
中的 SomeScript.groovy
:
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()
奇怪的是从 cmd
和 groovy SomeScript.groovy
执行 SomeScript.groovy
不会给出错误。所以我猜这是我错过的一些 Eclipse 配置。
SomeScript.groovy
如何被 build.gradle
中的 Gradle run
执行而不引起 ClassNotFoundException: org.apache.ivy.core.report.ResolveReport
?
我找到了解决问题的方法。我需要这个 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)
所以我放弃了使用 class GroovyShell
的方法,因为我无法为它正确配置 classPath。
我的脚本现在在每个 运行 之前执行。问题已解决。