gpt4 book ai didi

java - GroovyShell 和类路径

转载 作者:行者123 更新时间:2023-12-04 10:24:02 26 4
gpt4 key购买 nike

我开始用 groovy 编程,我想知道我什么时候使用 GroovyShell (new File ("script.groovy").txt) .evaluate (),
脚本类是否在类路径中看到依赖关系,我尝试了这个例子,它产生了以下错误。

// main.groovy

@Grapes([
@Grab(group='org.slf4j', module='slf4j-api', version='1.6.1'),
@Grab(group='ch.qos.logback', module='logback-classic', version='0.9.28')
])

import groovy.lang.GroovyShell;
import java.io.File;

new GroovyShell().evaluate(new File("C:\\Users\\Dev\\Desktop\\logger.groovy").text);
// logger.groovy
import org.slf4j.*
import groovy.util.logging.Slf4j

@Slf4j
class HelloWorldSlf4j {
def execute() {
log.debug 'Execute HelloWorld.'
log.info 'Simple sample to show log field is injected.'
}
}

def helloWorld = new HelloWorldSlf4j()
helloWorld.execute()
Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:869)
at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:979)
at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:967)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.codehaus.groovy.transform.LogASTTransformation$AbstractLoggingStrategy.classNode(LogASTTransformation.java:346)
... 38 more

最佳答案

如果你想要 logger.groovy文件使用与 main.groovy 相同的类加载器脚本,你需要用 GroovyShell 传递它构造函数。您可以通过调用 this.class.classLoader 获取当前的类加载器.

@Grapes([
@Grab(group='org.slf4j', module='slf4j-api', version='1.6.1'),
@Grab(group='ch.qos.logback', module='logback-classic', version='0.9.28')
])

import groovy.lang.GroovyShell
import java.io.File

new GroovyShell(this.class.classLoader).evaluate(new File("logger.groovy"))

输出:
$ groovy main.groovy
16:17:11.325 [main] DEBUG HelloWorldSlf4j - Execute HelloWorld.
16:17:11.327 [main] INFO HelloWorldSlf4j - Simple sample to show log field is injected.

关于java - GroovyShell 和类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60708434/

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