标签: groovyshell

Groovy Shell警告"无法打开/创建prefs根节点......"

我试图groovysh在Windows 8上打开Groovy Shell()并得到以下输出:

java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs 
at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
Run Code Online (Sandbox Code Playgroud)

打印完上述消息后,shell按预期启动.

windows groovy groovyshell

183
推荐指数
5
解决办法
14万
查看次数

避免跨不同的Groovy脚本共享Java元类

我的情况

我从Java调用多个Groovy脚本,它们都包含长期存在的Groovy对象.

我希望我的Groovy脚本能够对Java类(具有大约100个实例)的Java元类进行一些更改.但是,脚本应该能够进行不同的更改,其中一个脚本中的更改不应该反映在其他脚本中.

问题:Java类的元类在所有脚本中共享.

此问题类似于在执行GroovyShell后如何撤消元类更改?但在这种情况下,我希望同时执行两个脚本,因此在脚本执行后无法重置.

示例代码

SameTest.java

public interface SameTest {

    void print();
    void addMyMeta(String name);
    void addJavaMeta(String name);
    void callMyMeta(String name);
    void callJavaMeta(String name);

}
Run Code Online (Sandbox Code Playgroud)

SameSame.java

import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;

public class SameSame {
    public SameTest launchNew() {
        try {
            GroovyScriptEngine scriptEngine = new GroovyScriptEngine(new String[]{""});
            Binding binding = new Binding();
            binding.setVariable("objJava", this);

            SameTest script = (SameTest) scriptEngine.run("test.groovy", binding);
            return script;
        } catch (Exception | AssertionError e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] …
Run Code Online (Sandbox Code Playgroud)

java groovy groovyshell metaclass

15
推荐指数
1
解决办法
357
查看次数

Jenkinsfile中奇怪的变量范围行为

当我运行下面的Jenkins管道脚本时:

def some_var = "some value"

def pr() {
    def another_var = "another " + some_var
    echo "${another_var}"
}

pipeline {
    agent any

    stages {
        stage ("Run") {
            steps {
                pr()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

groovy.lang.MissingPropertyException: No such property: some_var for class: groovy.lang.Binding
Run Code Online (Sandbox Code Playgroud)

如果def删除some_var它,它工作正常.有人可以解释导致此行为的范围规则吗?

groovy groovyshell jenkins jenkins-groovy jenkins-pipeline

13
推荐指数
2
解决办法
5144
查看次数

groovysh中的MissingPropertyException

我运行groovysh,并键入以下代码:

groovy:000> String s = "Hello"
===> Hello
groovy:000> s
ERROR groovy.lang.MissingPropertyException:
No such property: s for class: groovysh_evaluate
        at groovysh_evaluate.run (groovysh_evaluate:2)
        ...
groovy:000>
Run Code Online (Sandbox Code Playgroud)

怎么访问s这里?

(如果我String s = "Hello"改为s = "Hello",我可以访问它.但我想知道如何在示例中访问它)


UPDATE

我想用来String s = "Hello"定义一个变量,因为我想声明它的类型.例如,如果我写:

Date date = []
Run Code Online (Sandbox Code Playgroud)

日期将是一个java.util.Date.但如果我写:

date = []
Run Code Online (Sandbox Code Playgroud)

这将是一个ArrayList.

groovy groovyshell

10
推荐指数
1
解决办法
4854
查看次数

使用GroovyShell作为"表达式计算器/引擎"(或:如何重用GroovyShell)

GroovyShell在我的程序中使用"表达式评估器/引擎".它接受两个输入:(a)一个或多个init脚本(b)用户定义的脚本.然后两者在运行时连接成大块脚本(文本)并提供给shell.

String initScripts = getFromDB()
String userScript = getFromUser()

def shell = new GroovyShell()
output = shell.evaluate(initScripts + userScript)
Run Code Online (Sandbox Code Playgroud)

上面的代码将在循环中运行,其中的内容userScript将有所不同.

到目前为止,initScripts仅包含def $yyyy = new Date().format('yyyy')可能在userScript(例如print "$yyyy 001")中引用的变量定义(例如).

有没有更有效的方法呢?(例如重用shell,怎么样?)因为现在它非常慢.

编辑: Groovy是必须的.请不要推荐其他脚本引擎.

编辑:我在想GroovyShell是否可以这样做(伪代码):

def shell = new GroovyShell()
shell.evaluate(initScripts)

for each userScript in DB {
    shell.put(userScript )
    def result = shell.evaluateThat()
    println "Result is $result"
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?(上次我用谷歌搜索它是不可能的,但我希望我错了)

groovy groovyshell

9
推荐指数
1
解决办法
9323
查看次数

如何使用GroovyShell列出所有绑定变量

我对Groovy很新.如何列出我传递给Binding构造函数的所有变量?

考虑到我有以下内容:

@Test
public void test() {

    List<String> outputNames = Arrays.asList("returnValue", "ce");

    String script = getScript();
    Script compiledScript = compileScript(script);
    CustomError ce = new CustomError("shit", Arrays.asList(new Long(1)));

    Map<String, Object> inputObjects = new HashMap<String, Object>();
    inputObjects.put("input", "Hovada");
    inputObjects.put("error", ce);

    Binding binding = new Binding(inputObjects);
    compiledScript.setBinding(binding);
    compiledScript.run();

    for (String outputName : outputNames) {
        System.out.format("outputName : %s  =  %s", outputName, binding.getVariable(outputName));
    }
}

private Script compileScript(String script) {
    GroovyShell groovyShell = new GroovyShell();
    Script compiledScript = groovyShell.parse(script);
    return compiledScript;
}
Run Code Online (Sandbox Code Playgroud)

如何在groovy.script中迭代所有变量(通过hashMap)?

groovy binding groovyshell

9
推荐指数
1
解决办法
1万
查看次数

在groovy中获取当前日期和时间?

在groovy中获取当前日期和时间的代码是什么?我环顾四周,找不到一个简单的方法来做到这一点.基本上我正在寻找相当于Linux的date

我有 :

import java.text.SimpleDateFormat

def call(){
    def date = new Date()
    sdf = new SimpleDateFormat("MM/dd/yyyy")
    return sdf.format(date)
}
Run Code Online (Sandbox Code Playgroud)

但我也需要打印时间.

workflow groovy groovyshell jenkins-pipeline

9
推荐指数
3
解决办法
6万
查看次数

如何在Jenkinsfile中捕获卷曲响应变量

我想卷曲一个URL并将响应捕获到一个变量中.

当我卷曲命令并回显其输出时,我得到正确的响应,如下所示

sh 'output=`curl https://some-host/some-service/getApi?apikey=someKey`;echo $output;'
Run Code Online (Sandbox Code Playgroud)

我想在变量中捕获相同的响应,并使用该响应进行进一步操作

下面是我的Jenkins文件

pipeline {
    agent {
          label "build_2"
       }
    stages {
        stage('Build') {
            steps {
                checkout scm
                sh 'npm install'

            }
        }
        stage('Build-Image') {
            steps {
                echo '..........................Building Image..........................'

                //In below line I am getting Output
                //sh 'output=`curl https://some-host/some-service/getApi?apikey=someKey`;echo $output;'

                script {
                    //I want to get the same response here
                    def response = sh 'curl https://some-host/some-service/getApi?apikey=someKey'
                    echo '=========================Response===================' + response
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你能告诉我在Jenkinsfile中需要做些什么改变吗?

groovy groovyshell jenkins jenkins-pipeline

7
推荐指数
1
解决办法
1万
查看次数

用于评估 Java 应用程序中的 groovy 脚本的 Maven 依赖项

我添加了使用 GroovyShell 在我的 Java 应用程序中解析和评估 groovy 脚本的功能。哪个 Maven 工件是我的构建中包含的最低限度?

我知道 groovy-all 肯定会包含我需要的一切,但我猜我也可以使用一个更小的包?

groovy groovyshell

6
推荐指数
1
解决办法
1808
查看次数

如何将多个 jars 添加到 groovyConole/groovysh 的类路径?

我不得不问这个问题感觉很荒谬,但我似乎无法将多个 jar 文件添加到 groovyConsole 和 groovysh 的类路径中。如何将多个 jar 文件添加到类路径?这是我尝试过的:

groovyConsole -cp ~/lib/compile/jar/mysql-connector-java-5.1.32.jar:~/lib/compile/jar/ojdbc6-11.2.0.3.jar

但是,当我在控制台中执行此代码时,我得到以下信息:

 file:/Users/charlie/lib/compile/jar/mysql-connector-java-5.1.32.jar
 file:/Users/charlie/projects/fuseanalytics/./
 file:/Users/charlie/.gvm/groovy/current/lib/ant-1.9.3.jar
 file:/Users/charlie/.gvm/groovy/current/lib/ant-antlr-1.9.3.jar
 file:/Users/charlie/.gvm/groovy/current/lib/ant-junit-1.9.3.jar
 file:/Users/charlie/.gvm/groovy/current/lib/ant-launcher-1.9.3.jar
 file:/Users/charlie/.gvm/groovy/current/lib/bsf-2.4.0.jar
 file:/Users/charlie/.gvm/groovy/current/lib/commons-cli-1.2.jar
 file:/Users/charlie/.gvm/groovy/current/lib/commons-logging-1.1.1.jar
 file:/Users/charlie/.gvm/groovy/current/lib/gpars-1.2.1.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-ant-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-bsf-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-console-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-docgenerator-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-groovydoc-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-groovysh-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-jmx-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-json-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-jsr223-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-nio-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-servlet-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-sql-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-swing-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-templates-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-test-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-testng-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/groovy-xml-2.3.6.jar
 file:/Users/charlie/.gvm/groovy/current/lib/hamcrest-core-1.3.jar
 file:/Users/charlie/.gvm/groovy/current/lib/ivy-2.3.0.jar
 file:/Users/charlie/.gvm/groovy/current/lib/jansi-1.11.jar
 file:/Users/charlie/.gvm/groovy/current/lib/jcommander-1.35.jar
 file:/Users/charlie/.gvm/groovy/current/lib/jline-2.11.jar
 file:/Users/charlie/.gvm/groovy/current/lib/jsp-api-2.0.jar
 file:/Users/charlie/.gvm/groovy/current/lib/jsr166y-1.7.0.jar
 file:/Users/charlie/.gvm/groovy/current/lib/junit-4.11.jar
 file:/Users/charlie/.gvm/groovy/current/lib/multiverse-core-0.7.0.jar
 file:/Users/charlie/.gvm/groovy/current/lib/qdox-1.12.1.jar
 file:/Users/charlie/.gvm/groovy/current/lib/servlet-api-2.4.jar
 file:/Users/charlie/.gvm/groovy/current/lib/testng-6.8.8.jar
 file:/Users/charlie/.gvm/groovy/current/lib/xmlpull-1.1.3.1.jar
 file:/Users/charlie/.gvm/groovy/current/lib/xstream-1.4.7.jar
Run Code Online (Sandbox Code Playgroud)

请注意,第一个 jar 文件 mysql jar 文件已添加到类加载器中,但未添加第二个 jar 文件 oracle jar 文件。我也试过两次使用 -cp 参数,例如:

 groovyConsole -cp ~/lib/compile/jar/mysql-connector-java-5.1.32.jar -cp ~/lib/compile/jar/ojdbc6-11.2.0.3.jar
Run Code Online (Sandbox Code Playgroud)

但这只是失败并出现错误。这些文档显然没有任何指导,除了模糊的暗示它像 Java 一样工作。因此,为什么第一次尝试没有开箱即用如此令人沮丧。

我还尝试在使用 Script > Add …

groovy groovyshell jar groovy-console

6
推荐指数
1
解决办法
4801
查看次数