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查看是否编译成功 , 如果没有出现编译后的文件 , 那肯定是第一步的路径没有配置对
3. 编译方式
然后点击模块的compile再进行编译 , 注意:每次模块clear后 , 都需要先执行第二步再编译模块本身
如果没有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;
}
}
4. 报错解决
如果在编译groovy的时候你引入了你的java类出现下面错误
而在项目中又调用了这个groovy, 在编译maven项目的时候, 同时会报错找不到groovy。
这种原因一般是因为groovy引入的这个java类比较特殊 , 里面又引入了别的依赖包里的java类。
解决办法
1. 先不要在groovy里面引入java类,先保证groovy编译成功。
2. 如果是在groovy的方法参数传入的java类, 那就先暂时注释掉java代码中对groovy的调用。
3. 对maven项目进行编译。
4. 修改groovy文件 ,引入需要的java类,编译groovy。文章来源:https://www.toymoban.com/news/detail-540479.html
5. 修改你的java类,去掉对groovy调用的注释,再次编译maven项目。文章来源地址https://www.toymoban.com/news/detail-540479.html
到了这里,关于IDEAJava项目使用Groovy文件编译的时候报错的解决, 以及Groovy的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!