Groovy

BuilderSupportでDSL

GroovyでDSLを作るときに便利なBuilderSupportを使う簡単な例です。 public class MyBuilder extends BuilderSupport{ protected Object createNode(Object name) { def obj = new Expando(name:name,children:,attributes:[:]) return obj } protected Obje…

HashMapでeachWithIndex

HashMapのキーと値のペアをインデックス付きで取り出します。 def m = [field1:"f1",field2:"f2",field3:"f3"] m.eachWithIndex{k,v,i-> println k + ":" + v + ":" + i } // 出力 field1:f1:0 field2:f2:1 field3:f3:2

Groovyで文字列をeval

その1 import groovy.lang.GroovyShell GroovyShell shell = new GroovyShell() def ret = shell.evaluate("1+1")その2 Evalのme()メソッドを使う。 int i = Eval.me("1+1")同Evalクラスのx()メソッド。 Eval.x()メソッドの第一パラメータは、評価したい第…

GroovyでArrayListを利用する

def arr = []Groovyでは上記で、配列でなくArrayListのインスタンスになる。先頭から順に要素を減らしていくような場合tail()が使える。 arr.tail()空になったかどうかの判定はsize()でなく、インスタンスそのままをifに渡すことができる。 if(arr){ // }els…

Groovyで動的にクラスをロード、再読み込み

基本な仕組みはJavaのクラスローダの場合と同じ(はず)。基本クラスローダ(ブートストラップ、エクステンション、システム) システムクラスローダは、クラスパス上のクラスを読むローダ。クラスパス上に存在するクラスはシステムクラスローダで読まれてしまう…

ファイル入出力時の文字コード指定

def a = new File("d:/aaa.txt") println a.getText("shift_JIS") def b = new File("d:/bbb.txt") println b.newReader("shift_JIS").text def o = new File("d:/out.txt") o.withWriter("UTF-8"){ it

AntBuilderでwarファイルをWebLogicにデプロイ

AntBuilderでtaskdefしてWebLogicのDeployerを利用してデプロイを行う。 def ant = new AntBuilder() ant.sequential() { taskdef name: "wldeploy", classname:"weblogic.ant.taskdefs.management.WLDeploy", classpath:"E:/bea/wlserver_10.3/server/lib/w…

AntBuilderでwarファイル作成

def ant = new AntBuilder() ant.war(destfile:deployWorkDir + "/" + projectName + ".war", webxml:"WEB-INF/web.xml"){ fileset(dir:".") { include(name:"**/*") exclude(name:"WEB-INF/lib/xxxx.jar") exclude(name:"**/*.java") } }warに含めたいファ…

DocumentBuilderで日本語のパスを渡すとエラーになる不具合

下記のようなファイルをxpathで読もうとします。 id01 car1 id02 car2 読み込むソースは下記です。 import javax.xml.parsers.* import javax.xml.xpath.* import org.w3c.dom.* // documentの作成 def path = "C:\\englishpass\\car.txt" DocumentBuilderFa…

Groovyのeachの動作

配列のように順次取り出せる構造になっている対象に対するeachは各要素でブロックを実行し、そうでない場合は自分自身で一回だけブロックを実行している模様。 def a = new Expando() a.id="id_a" [a].each{ println it } /* 結果: {id=id_a} */ a.each{ pri…

Groovyでzip

Groovyが関数型言語の特徴を汲んでいるのなら、おそらく実装されているはず。 zipは[1,2,3]と["a","b","c"]のリストを [[1,"a"],[2,"b"],[3,"c"]]のように掛け合わせる。 GroovyではList.transpose()メソッドで実装されている。 [[1,2,3],["a","b","c"]].tra…

Groovyのモックとスタブ

単体テストを行う際、クラスのメソッドの一部を動的に書き換えて実行できると、テストが行いやすくなるため、テストコードの量やテスト時間の短縮になる場合がある。 ここではMockForとStabForについてメモ。

GroovyでXPath

Groovyはあまり関係ないかもしれない。 読み込みたいデータ。 String books = ''' <books> <book> <id>01</id> <name>book1</name> </book> <book> <id>02</id> <name>book2</name> </book> <book> <id>03</id> <name>book3</name> </book> <book> <id>04</id> <name>book4</name> </book> </books> '''// この辺のやり方はGroovyのドキュメントから def builder = Doc…

Groovyの書き方

closure def f = {println "aaaa"} // f instanceof Closure はtrue f() f.call() def f2 = {arg-> println arg} f2("bbb") f2.call("bbbb") def f3 = {String a,int b-> println a + b} f3("ccc",3) f3.call("ccc",3) // クラスのstaticメソッドの場合 def …

Groovyの書き方

Javaと同じ書き方をしていてはGroovyらしさが出ない。どのように記述するとGroovyらしくなるのか。 文末のセミコロンの省略 import aaa.bbb.ccc println "aaaaa" ちなみにimport staticは記述可能。ただし現バージョンではimport staticに*を使うとエラーに…

Groovyの環境作成

・公式サイトからzipを解凍し、bin配下のgroovy.batに.groovyソースを渡して実行する。・eclipseプラグインを利用する場合。 1. http://groovy.codehaus.org/Eclipse+Plugin を参照し、UpdateSiteからプラグインをインストールする。 Javaプロジェクトを選択し…