首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GroovyShell和类路径

GroovyShell和类路径
EN

Stack Overflow用户
提问于 2020-03-16 23:08:49
回答 1查看 305关注 0票数 2

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

代码语言:javascript
复制
// 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);
代码语言:javascript
复制
// 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()
代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-16 23:19:14

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

代码语言:javascript
复制
@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"))

输出:

代码语言:javascript
复制
$ 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.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60708434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档