Java调用Groovy脚本

在idea下,标准的Java maven项目中展示如何调用Groovy脚本和方法。

maven项目引进Groovy lib

File -> Project Structure -> Global Libaries 添加下载好的Groovy下lib里面的jar包

调用Groovy脚本

首先,Java调用Groovy脚本需要该Groovy脚本里面有个main方法,用于传参

import org.apache.commons.lang.StringUtils
import org.jsoup.Jsoup
import org.jsoup.nodes.Document


static void main(String[] args) {

    try {
        def html = args[0]

        Document document = Jsoup.parse(html)

        def title = document.getElementsByTag("title").first().text()
        def content = document.select("#kw").html()

        def article = new Article()
        article.setTitle(title)
        article.setContent(content)

        print(article.toString())
    } catch (Exception e) {
        e.printStackTrace()
    }
}

这个脚本的功能是解析一个网页并将解析出来的数据封装成Article对象,该Article可以是Java类也可以是Groovy类。然后在Java程序中调用该叫不能去解析网页。

import com.x.script.groovy.Article;
import groovy.lang.*;
import org.apache.commons.io.IOUtils;

import java.io.File;
import java.io.FileInputStream;

public class App {
    public static void main( String[] args ) {

        try {

            String html = IOUtils.toString(new FileInputStream(new File("C:\\Users\\linsf\\Desktop\\baidu.html")));

            Binding binding = new Binding(new String[]{html});
            GroovyShell shell = new GroovyShell(binding);

            shell.evaluate(new File("C:\\Users\\linsf\\Desktop\\html_parser.groovy"));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

调用Groovy类的方法

现在编写一个Groovy类,该类的工作是解析一个网页并将网页内容封装成Article对象返回。

import org.jsoup.Jsoup
import org.jsoup.nodes.Document

class BaiduParser {

    Article parse(html, count) {

        print(count)

        try {
            Document document = Jsoup.parse(html)

            def title = document.getElementsByTag("title").first().text()
            def content = document.select("#kw").html()

            def article = new Article()
            article.setTitle(title)
            article.setContent(content)

            return article
        } catch (Exception e) {
            e.printStackTrace()
        }

        return null
    }
}

然后在Java程序中调用该类的解析网页的方法。

import com.x.script.groovy.Article;
import groovy.lang.*;
import org.apache.commons.io.IOUtils;

import java.io.File;
import java.io.FileInputStream;


public class App {
    public static void main( String[] args ) {

         try {

                String html = IOUtils.toString(new FileInputStream(new File("C:\\Users\\linsf\\Desktop\\baidu.html")));

                GroovyClassLoader loader= new GroovyClassLoader();

                Class fileCreator =loader.parseClass(new File("F:\\x-demo\\src\\main\\java\\com\\x\\script\\groovy\\BaiduParser.groovy"));

                GroovyObject object =(GroovyObject) fileCreator.newInstance();

                System.out.println("--" + object.invokeMethod("parse", new Object[]{html, 1}));

            } catch (Exception e) {

                e.printStackTrace();

            }
    }
}

性能调优参考:https://javanlu.github.io/2013/11/02/groovy-performance-issues/

转载于:https://my.oschina.net/ChiLin/blog/3062502

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值