gpt4 book ai didi

groovy - Groovy 脚本文件名中的禁止字符?

转载 作者:行者123 更新时间:2023-12-03 18:45:40 29 4
gpt4 key购买 nike

我写了一个很小的 ​​Groovy 脚本(只是一些简单的指令)并将它命名为 a-b.groovy .
我的同事在运行它时遇到问题并说:

I believe '-' is illegal in Groovy scripts filenames



问题: Groovy 文件名中非法字符的完整列表是什么?

(注意:与 Naming convention for groovy script files 不同,我的问题与约定无关)

最佳答案

最准确的答案是使用与命名 Java 类相同的命名 Groovy 脚本的标准。 Groovy,类似于 Java 支持 Unicode 字符编码,你很可能使用 任何 Unicode 字符 作为脚本名称(这并不意味着您应该这样做)。

每个 Groovy 脚本都被编译为一个扩展 groovy.lang.Script 的 Java 类。类(class)。它的名称取自 Groovy 脚本文件名。看看这个例子:

someSimpleGroovyScript.groovy

println "test"

当我们用 groovyc someSimpleGroovyScript.groovy 编译它时我们将看到一个类文件 someSimpleGroovyScript.class .现在,如果我们看看这个类是什么样子的:
javap someSimpleGroovyScript

我们会得到这样的东西:
Compiled from "someSimpleGroovyScript.groovy"
public class someSimpleGroovyScript extends groovy.lang.Script {
public static transient boolean __$stMC;
public someSimpleGroovyScript();
public someSimpleGroovyScript(groovy.lang.Binding);
public static void main(java.lang.String...);
public java.lang.Object run();
protected groovy.lang.MetaClass $getStaticMetaClass();
}

Groovy 脚本名称的特殊情况

尽管 Java 类命名标准适用于 Groovy 脚本名称,但 Groovy 支持一些特殊情况。

使用 -脚本名称中的字符

您可以将脚本命名为 a-b.groovy并作为 Groovy 脚本运行:
groovy a-b.groovy

你甚至可以用 groovyc 编译它获取以下 Java 类:
Compiled from "a-b.groovy"
public class a-b extends groovy.lang.Script {
public static transient boolean __$stMC;
public a-b();
public a-b(groovy.lang.Binding);
public static void main(java.lang.String...);
public java.lang.Object run();
protected groovy.lang.MetaClass $getStaticMetaClass();
}

即使这个类名对于 Java 编译器不正确,您仍然可以使用 Java 运行它(您需要将 groovy-all 添加到类路径):
java -classpath ".:./groovy-all-2.4.12.jar" a-b

使用 $在脚本名称中

在 Groovy 中,您甚至可以将脚本称为 123$.groovy你可以简单地运行它:
groovy 123\$.groovy

然而,Groovy 编译器将替换 $将此脚本编译为 Java 类时带有下划线:
javap 123_

输出:
Compiled from "123$.groovy"
public class 123_ extends groovy.lang.Script {
public static transient boolean __$stMC;
public 123_();
public 123_(groovy.lang.Binding);
public static void main(java.lang.String...);
public java.lang.Object run();
protected groovy.lang.MetaClass $getStaticMetaClass();
}

您仍然可以使用 Java 运行这样的编译脚本:
java -classpath ".:./groovy-all-2.4.12.jar" 123_

在脚本名称中使用空格

您还可以在脚本名称中使用空格,例如 this is script.groovy可以执行为:
groovy this\ is\ script.groovy

然而,Groovy 编译器会用下划线替换每个空格:
Compiled from "this is script.groovy"
public class this_is_script extends groovy.lang.Script {
public static transient boolean __$stMC;
public this_is_script();
public this_is_script(groovy.lang.Binding);
public static void main(java.lang.String...);
public java.lang.Object run();
protected groovy.lang.MetaClass $getStaticMetaClass();
}

您仍然可以使用 Java 运行这样的编译脚本:
java -classpath ".:./groovy-all-2.4.12.jar" this_is_script

使用 class.groovy作为脚本名称

它更进一步。您可以创建一个名为 class.groovy 的脚本。这将编译为以下 Java 类:
Compiled from "class.groovy"
public class class extends groovy.lang.Script {
public static transient boolean __$stMC;
public class();
public class(groovy.lang.Binding);
public static void main(java.lang.String...);
public java.lang.Object run();
protected groovy.lang.MetaClass $getStaticMetaClass();
}
javac编译器永远不会允许您编译具有此类名称的类,但是 java运行这样的字节码没有问题:
java -classpath ".:./groovy-all-2.4.12.jar" class

关于groovy - Groovy 脚本文件名中的禁止字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51238868/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com