IDEAJava项目使用Groovy文件编译的时候报错的解决, 以及Groovy的使用

这篇具有很好参考价值的文章主要介绍了IDEAJava项目使用Groovy文件编译的时候报错的解决, 以及Groovy的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Cannot compile Groovy files: no Groovy library is defined for module

1. 引入插件

模块需要引入插件和依赖 . 如下

${project.basedir} 是pom中的常量 , 项目的路径

/src/main/java/cn/com/baidu/message/groovy  是我的groovy文件所在的包路径

    <dependencies>  
        <dependency>
            <artifactId>groovy-all</artifactId>
            <groupId>org.codehaus.groovy</groupId>
            <version>3.0.9</version>
            <type>pom</type>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.gmavenplus</groupId>
                <artifactId>gmavenplus-plugin</artifactId>
                <version>1.6.1</version>
                <configuration>
                    <sourceEncoding>UTF-8</sourceEncoding>
                    <sources>
                        <source>
                            <directory>${project.basedir}/src/main/java/cn/com/baidu/message/groovy</directory>
                            <includes>
                                <include>**/*.groovy</include>
                            </includes>
                        </source>
                    </sources>
                    <testSources>
                        <testSource>
                            <directory>${project.basedir}/src/main/test/cn/com/baidu/message/groovy</directory>
                            <includes>
                                <include>**/*.groovy</include>
                            </includes>
                        </testSource>
                    </testSources>
                    <!-- 用maven编译时需要加encoding:mvn -Dfile.encoding=UTF-8 compile  -->
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>addSources</goal>
                            <goal>addTestSources</goal>
                            <goal>compile</goal>
                            <goal>compileTests</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2. 插件使用

Maven的Plugins中会出现gplus的插件 , 点击compile先编译groovy文件 , 编译后在target查看是否编译成功 , 如果没有出现编译后的文件 , 那肯定是第一步的路径没有配置对 

import jdk.nashorn.api.scripting.scriptobjectmirror;找不到,java,数据库,大数据

3. 编译方式

然后点击模块的compile再进行编译 , 注意:每次模块clear后 , 都需要先执行第二步再编译模块本身

import jdk.nashorn.api.scripting.scriptobjectmirror;找不到,java,数据库,大数据

如果没有compileGroovy或者没有compile模块 , 则会出现

Cannot compile Groovy files: no Groovy library is defined for module 模块名

下面是我写的groovy工具类 , 用于执行页面传过来的JavaScript函数

package cn.com.baidu.groovy

import com.alibaba.fastjson.JSONObject
import jdk.nashorn.api.scripting.ScriptObjectMirror
import javax.script.*

/**
 * Groovy动态条件封装请求参数
 */
class APIStartJavaScript{

    // 查找并创建指定脚本引擎
    private ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");

    Object executeScriptFunction(Object params, String script){
        // 初始化Bindings
        Compilable compilable = (Compilable) engine;
        Bindings bindings = engine.createBindings(); //Local级别的Binding
        // 绑定参数
        bindings.put("request", params);
        try {
            // 解析编译脚本函数
            CompiledScript JSFunction = compilable.compile(script);
            // 获取执行结果
            Object result = JSFunction.eval(bindings);
            if(result == null) {
                JSONObject jsonObject = new JSONObject();
                return jsonObject;
            }
            if (result instanceof ScriptObjectMirror) {
                // 遍历所有值
                ScriptObjectMirror scriptObjec = (ScriptObjectMirror) result;
                // 递归处理查询结果的数组
                recursionEencapsulation(scriptObjec);
                return scriptObjec;
            }else {
                return result;
            }
        } catch (Exception e) {
            if (e instanceof javax.script.ScriptException || e instanceof NoSuchMethodException) {
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("scriptException", e.getMessage());
                return jsonObject;
            }else{
                throw e;
            }
        }
        return null;
    }

    // 递归封装数组
    public void recursionEencapsulation(ScriptObjectMirror scriptObject) {
        for(String key : scriptObject.keySet()){
            Object mirror = scriptObject.get(key);
            if (mirror instanceof ScriptObjectMirror) {
                recursionEencapsulation(mirror);
                Boolean isArray = isArray(mirror);
                if(isArray) {
                    List<Object> list = parseArray(mirror);
                    scriptObject.put(key, list);
                }
            }
        }
    }

    // 判断是否为数组
    public Boolean isArray(ScriptObjectMirror scriptObject) {
        boolean isArray = true;
        int index = 0;
        for(String key : scriptObject.keySet()){
            if(!key.equals(index+"")) {
                isArray = false;
            }
            index++;
        }
        return isArray;
    }

    // 将数组转为ArrayList
    public List<Object> parseArray(ScriptObjectMirror scriptObject) {
        List<Object> arrayList = new ArrayList<Object>();
        for(String key : scriptObject.keySet()){
            Object obj = scriptObject.get(key);
            arrayList.add(obj);
        }
        return arrayList;
    }

}

import jdk.nashorn.api.scripting.scriptobjectmirror;找不到,java,数据库,大数据

4. 报错解决

如果在编译groovy的时候你引入了你的java类出现下面错误

import jdk.nashorn.api.scripting.scriptobjectmirror;找不到,java,数据库,大数据

import jdk.nashorn.api.scripting.scriptobjectmirror;找不到,java,数据库,大数据

而在项目中又调用了这个groovy, 在编译maven项目的时候, 同时会报错找不到groovy。

这种原因一般是因为groovy引入的这个java类比较特殊 , 里面又引入了别的依赖包里的java类。

解决办法

1. 先不要在groovy里面引入java类,先保证groovy编译成功。

2. 如果是在groovy的方法参数传入的java类, 那就先暂时注释掉java代码中对groovy的调用。

3. 对maven项目进行编译。

4. 修改groovy文件 ,引入需要的java类,编译groovy。

5. 修改你的java类,去掉对groovy调用的注释,再次编译maven项目。文章来源地址https://www.toymoban.com/news/detail-540479.html

到了这里,关于IDEAJava项目使用Groovy文件编译的时候报错的解决, 以及Groovy的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023新版keil编译不通过,报错的-保姆级解决方法

            昨天心血来潮,把之前老版本的keil5升级到了MDK-5.38和C51-9.61A版本。安装什么的一开始很顺利,直到编译的时候出现下面的报错信息:         这里的错误信息 提示就是:这里没有AC5版本的编译器,(大概就是这个意思)。 (default compiler version 5 ‘which is not

    2024年02月02日
    浏览(42)
  • 当mybatis-plus遇到这个报错的时候Update your application’s configuration. The following values are valid: 本人亲测,

    当mybatis-plus遇到这个报错的时候Update your application’s configuration. The following values are valid: 本人亲测,已经解决问题啦~ 检查代码的application.yml 这个文件是否有这个配置 如果这个配置的话,就直接删掉,这样项目就不会报错啦~

    2024年01月21日
    浏览(46)
  • Vue 项目安装依赖报错的情况,node版本不匹配情况

    出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响. 打开终端(按健win+R弹出窗口,键盘输入cmd,然后敲回车)并按照说明粘贴这些:(不一定行,本人失败了) windows命令提示符: 尝试卸

    2024年02月06日
    浏览(61)
  • 【UE5】第一次尝试项目转插件(Plugin)的时候,无法编译

    VS显示100条左右的错误,UE热编译也不能通过。原因可能是[名字.Build.cs]文件的错误,缺少一些内容,比如说如果要写UserWidget类,那么就要在 ]名字.Build.cs] 中加入如下内容: 根据你的文件进行添加。如果说依然有如图的问题,那你就去原来的项目里看看哪些没加上去。 正在创

    2024年01月22日
    浏览(52)
  • Mars3d引用单个示例文件WeiVectorTileLayer.js报错的解决办法

    参考文档修改文件后,发现依然报错: Mars3d单独引用示例文件教程_3d文件示例_绵绵-火星科技的博客-CSDN博客 具体报错截图: es5的方式直接丢到mars3d包下,mars3d如果node方式引入,这个卫片js就需要改造下暴漏主函数名。  看报错是: CesiumVectorTile.js里的错误,进去看看错误行

    2023年04月21日
    浏览(78)
  • 服务器数据恢复- Ext4文件系统分区挂载报错的数据恢复案例

    Ext4文件系统相关概念: 块组:Ext4文件系统的空间被划分为若干个块组,每个块组内的结构大致相同。 块组描述符表:每个块组都对应一个块组描述符,这些块组描述符统一放在文件系统的前部,称为块组描述符表。每个块组描述符大小为32字节,其主要描述块位图、i-节点

    2024年02月09日
    浏览(37)
  • 解决selenium使用webdriver.Chrome()报错的问题

    谷歌驱动下载地址: https://sites.google.com/a/chromium.org/chromedriver/home   运行成功(打开浏览器显示chrome正在受自动化软件测试的控制就代表成功):  找到def __init__(self, executable_path=\\\"chromedriver\\\", port=0, 修改executable_path=\\\"chromedriver\\\" 为executable_path=\\\"chromedriver驱动的路径\\\"   修改成功后

    2024年02月11日
    浏览(56)
  • 项目install的时候报错gyp ERR! find Python

    报错信息 在网上找了许多方法,大部分是下载python,但是没啥用(试过了,至少对我没用)。 其实真正的问题是node版本不兼容,下载项目中需要的node版本就行。 如何知道自己的项目中匹配的是哪个node版本呢 1、package.json 2、如果项目有用yarn,也可以查看yarn.lock

    2024年02月13日
    浏览(50)
  • /bin/rm Argument list too long – Linux 删除海量文件报错的解决方法

    这种情况主要在大批量删除居多文件的情况下发生,也是因为删除的命令参数超过了shell参数的个数导致的,可以通过 getconf ARG_MAX 来确认,解决方法好几种 配合find与xargs完成删除海量文件 可以通过find和xargs命令配合的方式,比如删除当前目录所有的png文件, 上面的这个命令

    2024年01月21日
    浏览(49)
  • 使用devsidecar 软件解决 git因网络问题报错的

    上链接: 下载你系统对应的版本 安装后根据教程设置即可 解决了git提交、拉取时报以下错误: Failed to connect to github.com port 443 after 21051 ms: Couldn\\\'t connect to server Recv failure: Connection was reset

    2024年02月11日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包