【错误记录】Groovy工程中的文件查找策略 ( main 函数中需要使用 src/main/groovy/Script.groovy | Groovy 脚本直接使用代码相对路径 )

简介: 【错误记录】Groovy工程中的文件查找策略 ( main 函数中需要使用 src/main/groovy/Script.groovy | Groovy 脚本直接使用代码相对路径 )

文章目录

一、报错信息

二、解决方案





一、报错信息


在 Java 类中 , 调用 Groovy 脚本 , 出现如下错误 ;


java.io.FileNotFoundException: Y:\002_WorkSpace\003_IDEA\Groovy_Demo\Script.groovy (Y:\002_WorkSpace\003_IDEA\Groovy_Demo\Script.groovy)
  at groovy.lang.GroovyCodeSource.<init>(GroovyCodeSource.java:108)
  at groovy.lang.GroovyShell.evaluate(GroovyShell.java:470)
  at JavaClass.startScript(JavaClass.java:17)
  at JavaClass.main(JavaClass.java:22)



image.png





二、解决方案


Groovy_Demo 是工程根目录名称 ;


这个错误本身很简单 , 但是涉及到 Java 与 Groovy 的路径查找机制的不同 ;


Java 类 JavaClass 位于 Groovy_Demo\src\main\groovy 目录下 , 要在该 Java 类中调用同目录的 Script.groovy 脚本 ;


此处必须使用完整的路径 “src/main/groovy/Script.groovy” , 才能查找到 “Script.groovy” 脚本 ;



Java 类中调用 Groovy 脚本 , 需要使用 “src/main/groovy/Script.groovy” 路径 ;


import groovy.lang.Binding;
import groovy.lang.GroovyShell;
import java.io.File;
import java.io.IOException;
public class JavaClass {
    public void startScript() throws IOException {
        // 注意这里创建 groovy.lang.Binding
        Binding binding = new Binding();
        // 设置 args 参数到 Binding 中的 variable 成员中
        binding.setVariable("args", new String[]{"arg0", "arg1"});
        // 执行 Groovy 脚本
        GroovyShell shell = new GroovyShell(JavaClass.class.getClassLoader(), binding);
        File file = new File("src/main/groovy/Script.groovy");
        shell.evaluate(file);
    }
    public static void main(String[] args) {
        try {
            new JavaClass().startScript();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


而在 Groovy 脚本中调用 另外一个 Groovy 脚本 , 如果两个 Groovy 脚本在同一个目录中 , 可以直接使用相对路径 " Script.groovy " 进行调用即可 ;


参考 【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 绑定作用域 binding 变量分析 | Binding 类 variables 成员分析 ) 博客的源码 ;


目录
相关文章
|
26天前
|
Java Maven 编译器
Java编译器注解运行和自动生成代码问题之Maven编译时设置生成的源码的文件夹路径问题如何解决
Java编译器注解运行和自动生成代码问题之Maven编译时设置生成的源码的文件夹路径问题如何解决
|
2月前
编写Groovy Hello World 程序
编写Groovy Hello World 程序
22 3
|
Java API Android开发
通过自定义Gradle插件修改编译后的class文件
通过自定义Gradle插件修改编译后的class文件
通过自定义Gradle插件修改编译后的class文件
|
XML SQL 前端开发
关于maven项目src/main/java目录下mapper文件不生效的问题解决方法
在构建maven+mybatis项目时,遇到个问题,就是接口dao无法找到对应的mapper.xml文件
808 0
关于maven项目src/main/java目录下mapper文件不生效的问题解决方法
|
Java
【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )
【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )
480 0
【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )
|
Java
【Groovy】Groovy 代码创建 ( 使用 Java 语法实现 Groovy 类和主函数并运行 | 按照 Groovy 语法改造上述 Java 语法规则代码 )
【Groovy】Groovy 代码创建 ( 使用 Java 语法实现 Groovy 类和主函数并运行 | 按照 Groovy 语法改造上述 Java 语法规则代码 )
230 0
【Groovy】Groovy 代码创建 ( 使用 Java 语法实现 Groovy 类和主函数并运行 | 按照 Groovy 语法改造上述 Java 语法规则代码 )
|
Java
【Groovy】Groovy 脚本调用 ( 命令行执行 Groovy 脚本并传入参数 | 获取 Groovy 脚本执行参数 )
【Groovy】Groovy 脚本调用 ( 命令行执行 Groovy 脚本并传入参数 | 获取 Groovy 脚本执行参数 )
969 0
【Groovy】Groovy 脚本调用 ( 命令行执行 Groovy 脚本并传入参数 | 获取 Groovy 脚本执行参数 )
|
测试技术
【错误记录】IntelliJ IDEA 编译 Groovy 报错 ( GroovyRuntimeException: This script or class could not be run. )
【错误记录】IntelliJ IDEA 编译 Groovy 报错 ( GroovyRuntimeException: This script or class could not be run. )
389 0
【错误记录】IntelliJ IDEA 编译 Groovy 报错 ( GroovyRuntimeException: This script or class could not be run. )
【Groovy】Groovy 脚本调用 ( Groovy 脚本编译 | Groovy 脚本字节码文件分析 )
【Groovy】Groovy 脚本调用 ( Groovy 脚本编译 | Groovy 脚本字节码文件分析 )
297 0
【Groovy】Groovy 脚本调用 ( Groovy 类中调用 Groovy 脚本 | 参考 Script#evaluate 方法 | 创建 Binding 对象并设置 args 参数 )
【Groovy】Groovy 脚本调用 ( Groovy 类中调用 Groovy 脚本 | 参考 Script#evaluate 方法 | 创建 Binding 对象并设置 args 参数 )
402 0