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

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误记录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)





二、解决方案



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 成员分析 ) 博客的源码 ;

以上是关于错误记录Groovy工程中的文件查找策略 ( main 函数中需要使用 src/main/groovy/Script.groovy | Groovy 脚本直接使用代码相对路径 )的主要内容,如果未能解决你的问题,请参考以下文章

错误记录IntelliJ IDEA 中 Java 代码中的中文注释报错 ( Menu / File / Settings / Editor / File Encodings 中修改工程编码 )

错误记录IntelliJ IDEA 编译 Groovy 项目报错 ( Groovy SDK is not configured for module )

错误记录Groovy 报错 ( Execution failed for task ‘:compileGroovy‘. > org/apache/tools/ant/taskdefs/Java )

错误记录IntelliJ IDEA 编译 Groovy 报错 ( Could not open/create prefs root node SoftwareJavaSoftPrefs )

错误记录Android Studio 中编写 Gradle 编译脚本时没有 Groovy 代码提示 ( Cannot find declaration to go to )

错误记录Groovy 闭包使用报错 ( 闭包中不能直接使用外部对象的方法 | 需要先设置 delegate 代理 )