gpt4 book ai didi

groovy - 让 Gradle 通知 GroovyShell 脚本所需的依赖项在哪里的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 05:16:54 29 4
gpt4 key购买 nike

我终于让 Gradle 下载依赖项并将它们传递给我从 gralde 任务调用的 groovy 脚本(因为 gradle 似乎不允许我使用葡萄)。

下面的代码是我能够让它工作的唯一方法。这是正确的方法吗?

build.gradle:

configurations {
shell
}

// Specify dependancies
dependencies {
// Groovy Script task dependancies
shell 'org.codehaus.groovy.modules.http-builder:http-builder:0.6'
shell 'org.codehaus.groovy:groovy-all:2.3.0'

// actual application dependancies
compile ...
}

task cleanupArtifactory (dependsOn: configurations.shell) << {
//Now add those dependencies to the root classLoader:
URLClassLoader loader = GroovyObject.class.classLoader
configurations.shell.each {File file -> loader.addURL(file.toURL()) }

new GroovyShell().run(file('scripts/artifactory.groovy'))
}

最佳答案

只需将您的 groovy 脚本视为类并使用 JavaExec 运行它们。

这是一个例子

task yourTask(type: JavaExec, dependsOn: classes) {
description = "Does some stuff"

if (project.hasProperty('args')) {
// this is just a fancy regex to get all the args from '-Pargs="-a -b -c"' and passing them to the main class
def myArgs = (project.args =~ /([^\s"']+)|["']([^'"]*)["']/).collect{it[1] ?: it[2]}
args myArgs
}

main = 'your.GroovyClass'
classpath configurations.compile, configurations.runtime, sourceSets.main.output
}

“args”位只是为了让你可以调用任务
gradle yourTask -Pargs="-a -b somevalue"

将值直接传递给类。

关于葡萄,我有一个工作配置,既允许我从 gradle 调用/编译 groovy 类,又允许 Grab 表示法能够直接调用脚本。

在您的 groovy 类中添加适当的抓取和导入,例如:
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.6')
import groovyx.net.http.*

在项目的 build.gradle 中,添加以下内容:
configurations {
ivy
}

dependencies {
ivy 'org.apache.ivy:ivy:2.3.0'
}

tasks.withType(GroovyCompile) { groovyClasspath += configurations.ivy }

现在我可以直接调用 groovy 脚本
groovy /path/to/the/GroovyClass -a -b somevalue

或使用前面定义的 gradle 任务。

如果我不添加那一点 Ivy 代码,那么带有抓取的类将无法通过 gradle 编译。

关于groovy - 让 Gradle 通知 GroovyShell 脚本所需的依赖项在哪里的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26456566/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com