`
lxlong
  • 浏览: 81771 次
社区版块
存档分类
最新评论

java加载groovy文件

 
阅读更多
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.IOException;

import static org.junit.Assert.*;
import static org.mockito.Mockito.spy;

public class GroovyCompiler {

    private static final Logger LOG = LoggerFactory.getLogger(GroovyCompiler.class);

    /**
     * Compiles Groovy code and returns the Class of the compiles code.
     *
     * @param sCode
     * @param sName
     * @return
     */
    public Class compile(String sCode, String sName) {
        GroovyClassLoader loader = getGroovyClassLoader();
        LOG.warn("Compiling filter: " + sName);
        Class groovyClass = loader.parseClass(sCode, sName);
        return groovyClass;
    }

    /**
     * @return a new GroovyClassLoader
     */
    GroovyClassLoader getGroovyClassLoader() {
        return new GroovyClassLoader();
    }

    /**
     * Compiles groovy class from a file
     *
     * @param file
     * @return
     * @throws java.io.IOException
     */
    public Class compile(File file) throws IOException {
        GroovyClassLoader loader = getGroovyClassLoader();
        Class groovyClass = loader.parseClass(file);
        return groovyClass;
    }

    @RunWith(MockitoJUnitRunner.class)
    public static class UnitTest {
        @Test
        public void testLoadGroovyFromString() {

            GroovyCompiler compiler = spy(new GroovyCompiler());

            try {

                String code = "class test { public String hello(){return \"hello\" } } ";
                Class clazz = compiler.compile(code, "test");
                assertNotNull(clazz);
                assertEquals(clazz.getName(), "test");
                GroovyObject groovyObject = (GroovyObject) clazz.newInstance();
                Object[] args = {};
                String s = (String) groovyObject.invokeMethod("hello", args);
                assertEquals(s, "hello");


            } catch (Exception e) {
                assertFalse(true);
            }

        }
    }
}

 

分享到:
评论

相关推荐

    Java调用Groovy,实时动态加载数据库groovy脚本

    总的来说,Java调用Groovy并实时加载数据库中的Groovy脚本是一种强大而灵活的解决方案,特别适用于需要频繁调整业务逻辑或进行热部署的场景。通过结合Java的稳定性和Groovy的动态性,我们可以构建出更适应变化的系统...

    groovy-loader-v2:在文件目录中动态加载Groovy脚本

    groovy-loader-v2 load groovy scripts in file directory dynamically 简介 动态加载指定目录下的groovy脚本,并将其注册为groovy bean,放置于...通过扫描监听指定路径下groovy文件的变更,来接受groovy脚本的

    groovy-loader:在文件目录中动态加载Groovy脚本

    groovy-loader load groovy scripts in file directory dynamically ...spring配置文件使用标签lang:groovy,通过指定script-source来加载指定路径下的groovy脚本,通过refresh-check-delay属性来定时

    groovy-src-1.8.5.zip_.bzrignore_Groovy_Java 8_groovy src_lowern

    Groovy源代码通常包括语法解析器、编译器、类加载器、标准库以及各种工具和框架的实现。通过阅读和分析这些源码,我们可以深入了解Groovy的内部工作原理,如何将Groovy脚本转化为字节码,以及如何与Java平台交互。 ...

    java在嵌入运行groovy代码1

    总的来说,Java 通过 GroovyShell 和 GroovyClassLoader 提供了强大的能力,使得我们可以动态地加载和执行 Groovy 脚本,这对于需要动态扩展功能或者进行数据统计等任务的系统来说,是一种高效且灵活的解决方案。...

    Groovy大量计算导致oom的解决办法

    下载的资源文件中,封装了并发计算以及内存溢出解决方案的工具类GroovyEngine.java,调用示例: GroovyEngine engine = GroovyEngine.getInstance(); engine.put("a",1); engine.put("b",2); Object v1 = engine....

    java动态代码执行

    GroovyClassLoader是Groovy提供的另一个关键工具,它允许我们在运行时动态加载Groovy类。我们可以使用这个类来编译和执行Groovy源代码字符串。下面是一个使用GroovyClassLoader的例子: ```java import groovy.lang...

    Groovy在Spring中的简单使用

    例如,可以在 Spring 配置文件中添加一个 defaults 元素,设置 refresh-check-delay 属性的值为 60000 毫秒,以便每分钟重新加载 Groovy 脚本。 在测试中,可以使用 Spring 的 ApplicationContext 来获取 ...

    java读取ini文件jar

    Java语言在处理各种类型的文件时提供了丰富的库支持, Ini文件是一种常见的配置文件格式,通常用于存储应用程序的设置或参数。虽然Java标准库没有内置对Ini文件的直接支持,但可以通过第三方库来实现读取和操作Ini...

    基于groovy实现 java脚本动态编译、部署、发布;可以通过脚本直接调用dubbo接口.zip

    GroovyShell允许在运行时执行Groovy脚本,而GroovyClassLoader则可以动态加载和执行新的类。在Java应用中,只需几行代码,就可以实现Groovy脚本的编译和执行: ```java GroovyShell shell = new GroovyShell(); ...

    groovy-api-chm

    此外,还包含了GroovyShell、GroovyClassLoader等工具类,用于运行和加载Groovy脚本。 "groovy-gapi-1.7.2.chm" 文件则专注于Groovy的额外功能和库,如Groovy的脚本编写环境、Swing构建器、AntBuilder等。Groovy ...

    加载资源文件的PDF

    在Android开发中,加载资源文件,尤其是PDF文档,是一个常见的需求。这个"加载资源文件的PDF"项目提供了一个完美的示例,演示了如何在Android应用中实现PDF的加载、缩放以及保持清晰度。以下是对这个项目的详细解析...

    groovy+maven+spring

    为了实现远程加载,我们可以利用HTTP或者FTP服务来获取Groovy脚本文件,然后在Spring容器中进行编译和执行。这样做的好处是,我们可以在不重启应用程序的情况下更新脚本,提高系统的可维护性和响应速度。同时,Maven...

    java实现PDF文件添加图片

    PDF文件添加图片是Java开发中常见的一项任务,特别是在生成报告、文档或证书等场景下,可能需要将图像插入到PDF中以增强可视化效果。这里我们将深入探讨如何使用iTextPDF库来实现在PDF中添加图片的功能。 iTextPDF...

    groovy-all.jar-生成JasperReport所要包含的包

    这个单一的JAR文件包含了大量的Groovy模块,包括编译器、类加载器、标准库以及Groovy语言的其他相关组件。这样,你无需为每个单独的Groovy库添加依赖,只需要引用`groovy-all.jar`即可。 描述中提到的`groovy-1.7.2...

    Myeclipse Groovy 插件

    Groovy是一种动态、灵活的Java平台语言,它拥有简洁的语法,适合快速开发和脚本编写。通过安装这款插件,开发者可以在MyEclipse中无缝地编写、调试和运行Groovy代码,提升开发效率。 在安装MyEclipse Groovy插件的...

    java-dotenv,dotenv是一个从.env文件加载环境变量的模块.zip

    Java-dotenv是一个专门为Java和Kotlin开发者设计的模块,它实现了与Ruby的Dotenv项目相似的功能,即从`.env`文件中读取并加载环境变量。这个库的主要目的是帮助开发者在不暴露敏感信息(如数据库凭证、API密钥等)到...

    groovy的eclipse插件

    而`plugins`目录则包含了实际的插件实现,它们是Eclipse可以识别和加载的JAR文件。 安装Groovy Eclipse插件的步骤如下: 1. **启动Eclipse**:打开你的Eclipse IDE,确保它是最新稳定版本,因为较旧的版本可能不...

    groovy集成springboot动态执行

    本文将深入探讨如何在Spring Boot项目中集成Groovy,并通过两种方式实现动态执行:通过Groovy文件执行脚本和通过数据库动态执行。 首先,让我们了解Groovy如何与Spring Boot结合。Spring Boot提供了对Groovy的支持...

Global site tag (gtag.js) - Google Analytics