作为groovy的新手
我试图替换事件监听器、过滤器等的java习惯用法
我在groovy中的工作代码如下:
def find() {
ODB odb = ODBFactory.open(files.nodupes); // data nucleus object database
Objects<Prospect> src = odb.getObjects(new QProspect());
src.each { println it };
od
如何在Groovy中基于字符串的值调用方法?例如,而不是
switch (val) {
case "one":
Obj.one()
break
case "two":
Obj.two()
break
}
我想做一些类似于obj.val的事情,其中val包含“一”或“二”,而不是case语句。看起来像这样
obj."$val"()
提供的链接已断开。这一条可能涵盖了这个主题:修改后的链接指向错误的特性(动态创建方法,而不是动态调用方法)。
我定义了两个域类,Employee和EmployeeDesiredSkill
雇员有
static hasMany = [employeeSkill:EmployeeDesiredSkill]
而员工所需要的技能
static belongsTo = [employee:Employee]
但groovyc给了我一系列错误,如下所示:
[groovyc] Compiling 15 source files to C:\dev\JavaTest\target\classes
[groovyc
下面的代码设置了一个私有方法。那么隐私到底有多隐私呢
public class Person {
private String name
}
def u = new Person(name:"Ron")
println u.name
按照设计,Groovy应该尊重私有修饰符,但是当前的实现没有考虑它
在中有进一步的细节,我认为我们可以访问它,因为groovy为所有变量添加了getter和setter。这些方法是公共的,因此可以在您期望的范围之外访问私有变量
与私有方法一样,使用元类的概念可
为什么方法A不被编译,而方法B和C是可以的
class A {
methodA() {
}
void methodB() {
}
static methodC() {
}
}
如果没有为方法声明类型,则需要在groovy中使用“def”修饰符:
class A {
def methodA() {
}
}
应该可以工作。如果没有为方法声明类型,则需要在groovy中使用“def”修饰符:
class A {
def method
是否有一种简单而简洁的方法来检查给定表的两行在所有列中是否包含相同的数据 不是特别的Groovy,但我会让SQL做如下的提升:
db.firstRow("SELECT COUNT(DISTINCT CONCAT(city,state,zip)) FROM Candidates WHERE id IN (1,2)")[0] == 0
我没有对此进行测试,但它似乎是最明显的解决方案:
// get an Sql instance
def db = [url:'jdbc:hsqldb:mem:tes
Groovy中的和AST转换有什么区别
也许我的问题与OO和应用不同模式有关,但我使用这两种模式,可以实现相同的行为
class Person {
String name = "Clark"
def walk() { "Walk" }
}
@Mixin(Person)
class Superhero {
def fly() { "Fly" }
}
def superman = new Superhero()
assert superman.name == "Clark
在Actors body中,我们需要在loop()方法中编写react()方法。我想知道这个循环方法与“for”或“while”循环有何不同
GPars文档说“loop()与嵌套的react()块协作,并将确保在后续的消息检索中循环。”我并不完全理解这一点。根据我的理解,无论我们向循环方法提供什么样的闭包,它都会被反复执行无限次。那么,如何协调嵌套的react()块呢?我相信这是一个很好的解释(第1页底部和第2页开始)
您基本上可以对连续性建模(从第1页的底部):
以允许参与者从当前线程分离的方
一些奇怪的行为:记录器在闭包中不可用
这是怎么回事
Logger logger = Logger.getLogger("groovy.my.foo");
def printParameters() {
if(logger.isDebugEnabled())
logger.debug("print parameters")
binding.variables.each { key, value ->
logger.debug("Name=$
我正在编写一个查询,该查询应该检测图形中的某些循环,这意味着我需要为路径中的某些节点分配名称,以便稍后可以将路径中的节点与保存的节点进行比较。例如A->B->C->A。这在gremlin中可能吗?听起来你在寻找这样的东西:
其中,您保留了以前遍历的顶点列表,然后在稍后的遍历中使用该列表 听起来你在找这样的东西:
其中,您保留了以前遍历的顶点列表,然后在稍后的遍历中使用该列表
全部。我在获取域上的Cookie时遇到问题。
我尝试得到饼干:
def "go to site"() {
when:
go "http://bla-bla-bla.bla"
then:
title == "Bla-bla-bla"
// check cookies
String cookies = driver.manage().getCookieNamed("name1").getValue()
p
我正在用Gradle做实验来构建几个jar,而不是维护一个包含EJB的类的列表,这样我就可以单独部署它们了。我认为在制作jar时扫描这些类可能会很方便
我认为使用asm扫描类可能比加载类并使用反射获取注释更简单,因此在其中一个任务中使用chuncky ClassReader
我不认为这是一个可以忽略的问题,基本上我有两个任务用于定义JAR的内容,两个任务都报告不同的内容通过每个文件打印输出进入JAR,但是当我查看发布存储库位置时,两个文件和关联的sha1都是相同的
要么格拉德尔破产了,要么更可能
标签: Groovy
iteratorclosurespeek
我在循环中有各种各样的场景,在循环遍历项目进行处理时,我会先“偷看”或“跳过”
一种情况是,我正在枚举一个文件的行,在一行的末尾有一个“continuation”字符,指示将下一行与当前行合并。如果我只是简单地循环,这并不太难,我可以直接读下一行,然后碰撞我的计数器/索引
使用迭代器执行此操作的模式并不明显。我实际上希望在不退出关闭的情况下使用下一行。但我甚至不确定这是否可行。对于这个使用闭包的迭代模式,有没有什么好的设计模式,这样我就不必求助于一个不那么groovy的循环了?它可能是一种迭代器
我是gradle/groovy的新手。我想创建自定义任务,这将做一些事情。我的第一个问题是任务完成后如何做?我可以重写doFirst/doLast闭包吗?也许我可以重写一些方法,在开始和结束时都会做一些事情
这是我的“任务”
正如上面所说(有人问了同样的问题),你应该
将您的build()代码包装在try…finally块中
或者将自定义任务文件夹写入build目录,以便在用户执行gradle clean
也许您可以使用该位置,让Gradle为您清理?需要在任务操作中创建(并删除)临时目录;否
想象一下用于表示对象层次结构的nodeBuilder:
class TestBuilder {
static main(args) {
def builder = new NodeBuilder()
def ulcDate = new Date(107,0,1)
def invoices = builder.invoices{
invoice(date: ulcDate){
item(count:5){
在gradle中,我们可以看到:
对于项目中的每个配置,Gradle提供了任务uploadConfigurationName和buildConfigurationName
据我所知,我可以创建这样的构建(没有任何插件,因为我不想在这个项目中使用插件):
要获得uploadConfigurationName和buildConfigurationName任务,您必须应用base插件,或者应用base插件(java,groovy等)。或者,您可以自己声明和配置这些任务(但这需要更多的工作)。您是否也可
假设我有以下()项:
这将产生:
1
2
3
Caught: java.util.NoSuchElementException
java.util.NoSuchElementException
at java_util_Iterator$next.call(Unknown Source)
at prog.run(prog.groovy:7)
正如所料
但是让我们将x=[1,2,3]更改为x=1..3,因此代码如下():
现在我们得到了输出:
1
2
3
null
并且没有抛出
如何在Groovy/POI中的test1.xls顶部插入一整行空白?我很快就要完成我的项目了,这是拼图的最后一块。非常感谢你的帮助
@Grab( 'org.apache.poi:poi:3.9' )
import static org.apache.poi.ss.usermodel.CellStyle.*
import static org.apache.poi.ss.usermodel.IndexedColors.*
import org.apache.poi.hssf.usermodel.H
现在,我正在编写一个Groovy脚本来调用其他人的接口。但是我需要在运行脚本时更改当前的工作路径。我知道这在Java中是不可能的。在Groovy中可能吗?当Groovy在JVM上运行时,同样的限制也适用。不幸的是,这是不可能的
如果可以将其他脚本作为单独的进程运行,则可以为ProcessBuilder参数working dir:
def processBuilder=new ProcessBuilder(command)
processBuilder.directory(new File("W
标签: Groovy
soapuihp-quality-centerscriptom
我正在尝试使soapUI和ALM通信。我终于得到了,甚至得到了HP OTA ALM参考。但是我有一些疑问
参考资料说
您必须在每个将与ALM平台通信的工作站上下载并注册COM库
我不可能只将OTAClient.dll添加到java.library.path或其他地方并使其工作。我这样问是因为当脚本完成时,并不是所有的脚本用户都没有管理员权限来注册dll。虽然他们肯定会有dll,因为一旦有人在他们的机器上打开ALM,它就会被下载
从我需要创建一个程序来通过程序访问QC或ALM到现在已经有几年了,但
Groovy中有没有办法模拟一个方法来接受任意数量和类型的参数
所以我的用例是,我有一个带12个参数的方法,我必须写它如下
testController.testService = [ testMethod: { a, b, c, d, e, f, g, h, i, j, k, m -> null } ]
似乎应该有更好的方法来做到这一点
testController.testService = [ testMethod: { Object... args -> null } ]
我有一个groovy脚本(source.groovy),它需要从另一个groovy脚本(external.groovy)调用一个方法。问题是external.groovy导入了一个不存在的库,因此我得到了一个错误。以下是一个例子:
Source.groovy:
new GroovyShell().parse( new File( 'external.groovy' ) ).with {
method()
}
下面是external.groovy:
import com.foo.d
我需要拦截预定义Java类上的方法调用。例如,假设我需要截取字符串类拆分方法,我该怎么做
我尝试了这种方法,但我不希望最终用户通过使用代理块包装调用来更改代码
使用Groovy有什么方法可以实现这一点吗 您想使用元类来实现这一点
如果你想做的是拦截对某个特定方法的调用,你可以这样做
// intercept calls to the split method on java.lang.String
String.metaClass.split = { String arg ->
/
我需要从gradle任务启动WireMock服务器。在java中,我会这样做:
WireMockServer wireMockServer = new WireMockServer(wireMockConfig().port(8089));
如何使用gradle任务创建此wireMock服务器?可以用完全相同的方法完成。这里有一个工作示例:
buildscript {
repositories {
mavenCentral()
}
dependencie
我有一个text文件(称之为test.txt),其内容如下:
line_1
line_2
line_3
line_n
我可以通过groovy在该文件的每一行末尾添加.xml?
我有两个类,我想从创建的实例中获取“owner”类的属性,请参阅下面的代码
class A{
String test
A(){
//How to get the value of "test" property of the class B from here?
//
}
}
class B{
String test
def doSomething(){
//I'd like that instance of A get the val
真让我吃惊
根据groovy的文档,groovy可以使用“getProperty”方法来获取对象的属性。因此,当我想要更改获取特殊对象属性的行为时,我使用一个category类来重写“getProperty”方法。但是,它不起作用。
最后,我发现groovy框架使用category类中的“get”方法来获取属性,即使对象不是映射。
我的问题是它是一个bug还是groovy就是这样工作的
这是分类类
class DynaBeanExtension {
public static void
我有code Parser.groovy文件:
def json = """{
"description": "string",
"mode": "DEFAULT",
"name": "string",
"start_time": "2015-11-05T13:26:40.626Z",
"tags": [
"string"
]
}"""
process
我们在windows jumpbox上安装了SoapUI(开源版)。许多用户可以使用自己的帐户登录、打开soapui、从十几个项目导入wadl/wsdl并执行测试
由于IP总是相同的,因此我们无法找到谁发送了请求,而当发出一些破坏性请求时,这是一个问题,会导致许多恢复问题(只有授权用户有权访问)
现在我们想向请求中添加http头,比如user:${=System.getenv(“USERNAME”)}。它可以是新的头属性,甚至可以是用户代理的一部分
我们试图将该属性作为用户代理字符串的一部分放
我写了这个简单的代码
def x = [[a: 1], [a: 2], [a: 3]]
if (x["foo"]) {
print("Hello")
}
我的预期输出是不会打印Hello,因为x不包含“foo”
但是,x[“foo”]的输出是[null,null,null],它不是null,并且仍然进入if条件
那么,我如何检查对象x是否不包含名为foo的属性呢?要测试它是否包含您可以使用的键
x*.containsKey("foo").any{it}
此处*。表
我有一个xml,看起来像这样
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Samples>
<Sample>
<Name>
Sample1
</Name>
<Date>
01/20/2016
</Date>
</Sample>
</Samples&
我试图使用groovy脚本将REST(POST)API调用的原始响应捕获到一个文件中
我可以在RAW中看到下面的响应,但当生成文件时,它是空白的
休息反应:
HTTP/1.1 401 Unauthorized
content-length: 0
Date: Tue 12 jul 2016 12:12:12gmt
WWW-Autheticate: OAuth
Server: Jetty (8.1.17V20150415)
我使用的是SOAPUI版本5.2
谢谢你的帮助
Groovy脚本:
def
最近遇到了这个问题——当我在一个groovy类中有两个类时,如果主方法类不在顶部,我遇到了这个问题
class Book {
private String name
void setName(String bookName) {
name=bookName
print "Book Name => "+bookName+"\n";
}
String getName(){
return name;
我正在尝试以下方法:
"""foo
bar""".eachLine { line ->
['foo', 'baz'].any{
println(it + ' - ' + line)
line == it
}
}
结果是:
foo - foo
foo - bar
baz - bar
false
我想测试多行字符串的任何一行
"""foo
bar"""
存在于数组中['foo','baz']
但在这里,如果字符串中存在foo,则返回fals
我有一个生成groovy的动态html文件。这个html模板格式的一部分是{routeId}{groovyMap}类似的
USER_FORM[name:'Dean', user:randomFunction([item:'s', day:'Tuesday'])]
或者类似的
USER_FORM[name: 'Dean', user: user]
我把第一个例子弄得更复杂了。目前,我在“:”上拆分并验证提供的所有密钥。我想做的是获取groovy代码段并获取所有键并进行验证
1. all
我在Windows上遇到了一个问题,其中使用EncodingGroovyMethods#decodeBase64读取和解码编码文件:
getClass().getResourceAsStream('/endoded_file').text.decodeBase64()
这给了我:
base64值中的字符不正确
文件本身有CRLF结尾,groovy decodeBase64实现片段有注释,因此:
} else if (sixBit == 66) {
我有一个这样的开关盒:
def someString = 'hello1234bla'
// ...
switch (someString) {
case {it.contains('1234')}:
doSomething()
break
case {it.contains('2468')}:
doSomethingElse()
break
default:
throw new Exce
我想解析作为JsonBuilder对象的JSON。此JSON包含一些反斜杠。这就是我正在做的
b = new JsonBuilder(json).toPrettyString();
s = new JsonSlurper().parseText(b);
但是我得到了这个错误
第8行第27列上需要一个值或右大括号。
这是因为toPrettyString从我的JsonBuilder字符串中删除了反斜杠(转义字符)。我有没有办法保留反斜杠
import groovy.json.*;
def jso
我只是想知道,确定测试步骤之间的时间和在免费版本的SOAPUI中记录总体平均时间的最佳方法是什么?我有一个测试,它有两个请求步骤,假设在测试用例中请求步骤1是步骤3,请求步骤2是步骤5。我正在执行一个负载测试,所以我重复了多次测试,但我想知道从请求步骤1到整个测试完成后到达请求步骤2所花费的平均时间
有没有关于这样做的最佳实践的想法 您可以在文件中写入时间戳的步骤中添加一些groovy脚本 您可以从请求的响应中验证
标签: Groovy
metaprogramminggroovyshell
我在groovy文件中定义了一个闭包,它使用shell.evaluate()方法加载。
我需要通过使用shell“$closurename.call(arguments)调用程序来调用此闭包。
然而,为了制定闭包参数(上面的参数),我现在需要知道闭包$Closurename接受的参数和参数名称是什么。在Groovy中是否有一种动态了解这一点的方法?我签入了metaClass.method属性,但在下面的示例中这不起作用
下面是示例代码
def arguments;
嗨,关于这个问题:
我试过使用提供的工具。我在尝试执行executeScript处理器时发现一个错误:
如果不使用try-catch:
基本上,它尝试执行以下脚本:
import javax.crypto.Cipher
import javax.crypto.SecretKey
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec
import java.nio.charset.Stan
我想在groovy脚本中为“static”一词键入更少的字符。在我的脚本中是否可能有一些宏用“st”代替“static” Groovy没有这样的C风格字符串替换宏。是关于在抽象语法树上执行元编程转换,而不是“仅仅”执行字符串替换。几乎每个IDE都支持可以替换字符串的代码段。(使用这样的C++宏是非常糟糕的做法)在一种只有你能理解的语言中没有太多的意义。我希望你问这个只是为了一个代码?
我正在尝试将一个包含3个子节点的节点替换为一个包含2个子节点的新节点
replaceNode函数()只接受闭包,而不像replaceBody那样接受对象
但是,replaceBody将替换节点的主体,而不是实际节点
我做了一个简单的例子,可以在
import groovy.util.slurpersupport.*;
导入groovy.xml.XmlUtil;
类swarco\u更新\u示例\u替换\u节点\u测试\u简单{
静态真空总管(def参数){
/*重叠条目*/
字符串xmlorg3e
我在通过Jenkins文件运行作业时遇到了一些问题。现在,该作业运行到构建阶段,之后,每个阶段都会失败。我还为接收到的控制台输出附加了一个图像
到处搜索,但没有找到任何解决方案,不知道我在代码中犯了什么错误。
[![在此处输入图像描述][1][1]
parameters {
booleanParam(defaultValue: true, description: 'Execute Pipeline?', name: 'GO')
}
我在windows 10中使用jmeter 5.1,在我的jmeter测试计划中,我从文件中读取json数据,读取后,我使用log.info${sdata}记录消息,但输出将大括号{转换为方括号[,有人能告诉我出了什么问题吗
下面是json文件包含的数据
{"name":"Foo Bar","year":"2018","timestamp":"2018-03-08T00:00:00","tags":["person","employee"],"grade":3.14}
{
"name"
我正在使用snakeYaml将YAML格式的字符串转换为GroovyMap
@Grab(group='org.yaml', module='snakeyaml', version='1.17')
import org.yaml.snakeyaml.Yaml
Yaml yaml = new Yaml()
Map config = yaml.load(new File('config.yaml').text)
现在我想说的是相反的:给定一个Groovy映射,我想将其转换为YAML格式的字符串
我有一个版本号列表,比如
Versions = [0.0.10, 0.0.11, 0.0.13, 0.0.14, 0.0.15, 0.0.16, 0.0.17, 0.0.18, 0.0.19, 0.0.20, 0.0.21, 0.0.22, 0.0.23, 0.0.24, 0.0.25, 0.0.26, 0.0.27, 0.0.28, 0.0.29, 0.0.3, 0.0.30, 0.0.33, 0.0.34, 0.0.35, 0.0.36, 0.0.37, 0.0.38, 0.0.39, 0.
我需要从苏佩找到卡桑德拉
我使用了下面的脚本
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
def rs;
//create cluster for cassandra
Cluster cluster = new Cluster.Builder().addContactPoint("xxxx").withCredentials("xxxx&qu
我试图使String/GString对象可以通过以下方式调用
String.metaClass.call = { println toUpperCase() + " " + it() }
这会在对文本调用时产生MissingMethodException,但并不总是:
def a = 'abc'
a{ 2 * 3 } //ABC 6 -> OK
'a'{ 2 * 4 } //ABC 8
我正在使用SOAPUI5.5.0,我正在尝试从RESTAPI GET响应自动下载.xls附件。
它不会出现在响应的附件选项卡中
我尝试添加“Enable MTOM | true”,但请求停止使用
它
我尝试了一些groovy脚本,但我没有从中得到任何东西
在此之后,响应有一堆无法读取的字符
如果查看XML选项卡,我会发现:
**XML RESPONSE**
<data contentType="application/vnd.ms-excel" contentLen
1 2 3 4 5 6 ...
下一页 最后一页 共 96 页