�ʲ���ʸ�Ϥϡ�Object Computing, Inc(OCI) �ˤ���The Java News Brief��(2004ǯ2��) �˷Ǻܤ��줿��Mark Volkmann �ˤ���Groovy - Scripting for Java�פ���������������������ΤǤ��������Ԥε��Ĥ������������������Ƥ��ޤ��������ˤ����äƤϡ�ma2����takai������Ƥ��Ф��ƥ����Ȥ������ޤ��������꤬�Ȥ��������ޤ���
Groovy ������ȯŸ��ο���������Ǥ����ܵ����θ�ʸ��2004ǯ2��Τ�ΤǤ��ꡢ�����������Ƥ� Groovy �κǿ��������ɿ路�Ƥ���櫓�ǤϤ���ޤ������������Ǥξ���(1.0-beta4)��ʤ�٤�ȿ�Ǥ���褦�ˤϤ��ޤ������������ǥ����ޤǤˤϤ���˴��Ĥ���ѹ����ä����뤳�Ȥ�ͽ�ۤ���ޤ��������ε��Ҥ� Groovy �θ����Ȥ��ۤʤ���ϡ�������ͥ�褷�Ƥ������������ΰ����ǡ��������ä�����Τ��ε����ؤΥե����ɥХå��ޤ��ޤ���Ϣ��������������ޤǤ���������ꤤ���ޤ����ե����ɥХå��ϵ��������ƤΤߤʤ餺�����������ˤĤ��Ƥⴿ�ޤǤ���
Groovy �ϥ����ץ����Υ�����ץȸ���Ǥ��롣Java �Ǽ������졢Java �ȶ�̩�����礵��Ƥ��롣�Ȥ��ˤ����äƤ� J2SDK 1.4 ��ɬ�פ���Groovy �� Ruby �� Python �Ȥ��ä�������ץȸ���ε�ǽ�Τ����Ĥ��� Java ���ɲä��Ƥ��롣Groovy �ε�ǽ�ˤϡ�ưŪ���դ������������㡢�ưפʥ��֥������ȡ��ʥӥ�����������ơ�List �� Map ���갷������δʷ��ʸˡ���ޤޤ�Ƥ��롣����������ǽ(�Ȥ����¿���ε�ǽ)�ξܺ٤��ܵ����Ǥϼ��夲�롣
Groovy �Υ����֥����Ȥ�����Ѥ��褦�� "Groovy �Ϥ��ʤ��� Java �ץ�åȥե�����Ǽ�����ʷ�ˡ������Ƴڤ�����ȤǤ���褦���߷פ���ޤ������� Groovy �� Python �� Ruby ���϶����� Java �ץ�åȥե�����ˤ⤿�餷�ޤ���"
Groovy ������ץȤǤϤ����� Java ���饹�����ѤǤ��롣Groovy ������ץȤ� Java �ΥХ��ȥ�����(.class �ե�����)�ؤȥ���ѥ���Ǥ���Τǡ����̤� Java ���饹����ƤӽФ����Ȥ�Ǥ��롣Groovy ����ѥ���Ǥ��� groovyc �ϡ�Groovy ������ץȤ� Java �������ե������ξ����ѥ��뤹�뤳�Ȥ��Ǥ��뤬�������� groovyc �ǤϤ����Ĥ��� Java ʸˡ(���Ȥ��Хͥ��Ȥ������饹)��̤���ݡ��ȤǤ��롣
������ϡ����ץꥱ����������Τ� Groovy �ǽ��Ȥ��Ǥ������Υѥե����ޥ������� Java ���ץꥱ�������ȤۤȤ���������ʤ����������������Groovy ��¾�Υ�����ץȸ���(Ruby��Python��Perl�������� BeanShell)�Ȥϰۤʤ�Ȥ����������������ߡ�Groovy ����ǽ�� Java �������롣 ���θ����ΤҤȤĤϡ��������줿 Groovy �ΥХ��ȥ����ɤ����ȥ饯���� private/protected ��åɤ�ƤӽФ��Τ˥�ե쥯���������Ѥ��Ƥ��뤿���������Ͼ���Υ����Dz�褵����������
Groovy �γ�ȯ�� James Strachan �� Bob McWhirter �ˤ�äƻϤ��줿��James ��¾�ˤ⤿������Υ����ץ������ץ������Ȥγ�ȯ�˷Ȥ�äƤ���(Jelly��dom4j��Jaxen��Betwixt�������� Maven)��Bob �� Jaxen �� Drools(�����ץ����ǥ��֥������Ȼظ��� Java �롼�륨��)���ϻϼԤǤ⤢�롣
�ܵ����Ǥ� Groovy �ε�ǽ�Τ��٤ƤǤϤʤ���������¿������夲�롣�ɼԤ� Java ��ʸˡ�� Groovy ��ʸˡ�Ȥ���Ӥ��Ǥ������٤ˤ� Java ��ʸˡ�˿Ƥ���Ǥ����Τ����ꤹ�롣
���줬���ץ�����ߥ����ʸˡ��������ΤȤ���Τϲ����ˤĤ�������Ū�˹�դǤ���С��ץ�����ߥ���ο��Ϥ��ۤ�¿����ɬ�פȤ��ʤ������������¤ˤϥץ�����ߥ��줬��¿��¸�ߤ��Ƥ��뤳�Ȥ�ͤ���ȡ����줬��դ�ã���Ƥ��ʤ����Ȥ����餫�����ܵ�������λ��ˡ�Java ��ʸˡ�Ǥޤä�����ʬ�ǡ�Groovy ��ʸˡ�ϥ��å��������奬�����Ť����Ƹ��˹��ʤ��ʡ��Ȼפ����⤷��ʤ����⤷�����ʤ�������Ƚ�Ǥ����顢��Ȥ��Ƥ� Pat Niemeyer �� BeanShell �� http://www.beanshell.org ������Ȥ��Ƥ���Ĵ�٤Ƥߤ뤳�Ȥ��᤹�롣�����ǤϤʤ���Groovy �δʷ��ʸˡ���������ä��ʤ顢����⤦�ۤ�ȥ��롼���������!!
Groovy �����������ɤ���ˤϡ��ʲ��μ��˽�����
�ǿ��Ǥ� CVS �ˤ��ꡢ��������������ɲ�ǽ���������ˤĤ��Ƥ��������Ȥ��Ƥۤ�����
Groovy �ȡ��뤹��ˤϡ��ʲ��μ��˽�����
Groovy �Υ�����ץȤ�¹Ԥ���ˤ�4�������ˡ�����롣 �ɤ���ˡ�Ǥ��äƤ⡢������ץȤϥѡ�������� Java ���������Ѵ����줿�����ǡ� Java �Х��ȥ����ɤؤȥ���ѥ��뤵��롣
groovysh
���ޥ�ɤϡ�Groovy �Υ��ơ��ȥ��Ȥ����ϤǤ���
����Ū�������ư���롣
���ơ��ȥ��Ȥ� Enter ���������Ȥ�ʣ�������ϤǤ��롣
���ơ��ȥ��Ȥϡ�execute
���ޥ��[*1]�����Ϥ����ޤ�ɾ������ʤ���
groovyConsole
���ޥ�ɤ� Swing �Υ�����ɥ���ư���롣������ɥ��β����ڥ���� Groovy ���ơ��ȥ��Ȥ����Ϥ��롣Actions ��˥塼���� Run �����֤ȥ��ơ��ȥ��Ȥ��¹Ԥ���롣���ϤϾ����ڥ����ɽ������롣File ��˥塼����Ѥ��ơ�������ץȤ�ե����뤫�鳫�����ꡢ�ե��������¸���뤳�Ȥ��Ǥ��롣
Groovy �Υ�����ץȥե����� (����Ū�ˤϳ�ĥ�� .groovy �Υե�����)�Τ褦�ʥ��ޥ�ɤ���¹Ԥ��뤳�Ȥ��Ǥ��롣groovy script-name.groovy
Groovy ������ץȤ� groovyc script-name.groovy
���ޥ�ɤ���Ѥ��� Java �� .class �ե�����ؤȥ���ѥ���Ǥ��롣������ץȤˤϥ롼�������ơ��ȥ���[*2]�����ä��Ȥ��Ƥ⡢�������줿 .class �ե�����ˤ� main ��åɤ��ޤޤ�Ƥ���Τǡ�java script-name
���ޥ�ɤ�Ȥä� Java ���ץꥱ�������Ȥ��Ƽ¹ԤǤ��롣main ��åɤ����ƤˤĤ��Ƥϸ�Ҥ��롣�¹Ԥˤ����äƤϥ��饹�ѥ��� Groovy �� lib �ǥ��쥯�ȥ�ˤ��� groovy*.jar
�� asm*.jar
���ɲä���ɬ�פ����롣
�ʤ�ȡ����κ�Ȥ�Ԥ�����Υ������� Ant ���������Ѱդ���Ƥ��롪
org.codehaus.groovy.ant.Groovyc
���饹����������
[*1]����: "go"���ޥ�ɤǤ�¹Բ�ǽ��
[*2]����: ����Ū�ˤϤɤΥ��饹�ˤ�°���ʤ����ơ��ȥ��ȡ�
�ޤ��� Java �� Groovy ��ʸˡ��μ�ʰ㤤����夲�롣�٤�����ΤˤĤ��Ƥϸ�Ҥ��롣
java.lang
�� groovy.lang
�������� groovy.util
�Υ��饹�ϼ�ưŪ�˥���ݡ��Ȥ���롣
[*3]����: 1.0beta4���Ȥ��Ǥ�ɾ���ͤ��֤�褦�ˤʤäƤ���褦����
[*4]����: ����ϸ�ʸ�θ��ꡣJava�Υ�åɥ������פΥǥե���Ȥ� package-private��
�ѿ����ץ��ѥƥ�����å�/����������ΰ����������ƥ�åɤ�����ͤˤ����ơ���������Ͼ�ά�Ǥ��롣�����Ϥɤ�ʷ��Ǥ�Ȥ뤳�Ȥ��Ǥ��롣�ޤ����夫��ۤʤ뷿�������Ƥ뤳�Ȥ�Ǥ��롣������ץ�ߥƥ��ַ������Ѳ�ǽ��(auto-boxing �����)�����Ѵ��Τ�¿����ɬ�פ˱����Ƽ�ưŪ�˹Ԥ��롣���Ȥ��С�String ��ץ�ߥƥ��ַ�(int �Ȥ�)�ȷ���åѡ����饹(Integer �Ȥ�)�Ȥδ֤Ǥη��Ѵ��������������Τ������ǡ��ץ�ߥƥ��ַ��쥯�������ɲä��뤳�Ȥ��Ǥ��롣
Groovy �� java.lang.Object �� java.lang.String �Ȥ��ä�ɸ�� Java ���饹�˿�¿���Υ�åɤ��ɲä��Ƥ��롣�ܺ٤� http://groovy.codehaus.org/groovy-jdk.html �ȤΤ��ȡ������Ǥ� Object ���饹���ɲä��줿��Τ�������¾�Τ�ΤˤĤ��Ƥϸ�Ҥ��롣
<class-name@hashcode property-name=property-value ...>
�η�����ʸ������֤���
���Ȥ��С� <Car@ef5502 make=Toyota model=Camry>
�Ȥ��ä�������
������ static �� print ��åɤϥ��֥������Ȥ� toString
�ͤ���Ϥ��롣
���Ȥ��С� print car
���뤤�� println car
�Ƚ�
��ե쥯���������Ѥ���ưŪ�ʥ�åɸƤӽФ���Ԥ���
ʸˡ�ϡ� object.invokeMethod(method-name, argument-array)
����
���Υ���ץ�ϡ�4����Ϥ��롣
s = 'abcabc' // Java ��ʸ���� method = 'indexOf' args = ['b', 2] println s.invokeMethod(method, args) // 4
��ƥ��ʸ����ϡ����륯�����Ȥޤ��ϥ��֥륯�����ȤǰϤࡣ���֥륯�����Ȥ�Ȥä����ϡ��������ͤ����ѤǤ��롣�������ͤ�ʸˡ�ϡ� ${expression}
����Ruby�Ǥ� # ������� $ ����Ѥ��롣���֥륯�����ȤǰϤޤ줿ʸ����ˤҤȤİʾ���������ͤ��ޤޤ���硢����ʸ����� groovy.lang.GString
���֥������Ȥ�ɽ������롣�����Ǥʤ�ʸ����� java.lang.String
����GString ��ɬ�פ˱����� java.lang.String
�ؤȶ���Ū���Ѵ�����롣
groovy.lang.GString �Ȥ��ä� Groovy ���饹�� Javadoc �ϡ� http://groovy.codehaus.org/apidocs/ ���ɤळ�Ȥ��Ǥ��롣
�������ͤ� toString ��åɤ��������ݤˤȤƤ������������Ȥ��С�
String toString() { "${name} is ${age} years old." }
ʣ����ʸ���������������ˡ��3���ढ�롣�ʲ��Υ���ץ�Ϥ��٤�Ʊ����̤ˤʤ롣�Ǹ�Υ���ץ�ϥҥ��ɥ������("here-doc")�ȸƤФ���Τ���3�������ʸ����ǥ�ߥ�ʸ����Ȥ��ƻ��ꤹ��ȡ�ʸ������ͤˤϺǽ��2���ܤΥǥ�ߥ��֤˸����ʸ�����ͤȤ������ꤵ��롣"EOS" ("End Of String" ��ά)�Ϥ褯�Ȥ���ǥ�ߥ��ͤ������������¾��ʸ������ѤǤ��롣
s = " This string spans three \"lines\" and contains two newlines." s = """ This string spans three "lines" and contains two newlines.""" s = <<<EOS This string spans three "lines" and contains two newlines. EOS
�嵭�Υ����ɤǡ��Ǹ�β��Ԥ��Ĥ�ʤ����Ȥ����ա�
�ʲ��� java.lang.String
���ɲä���Ƥ����åɤ���
��������ʬʸ�����ޤ�Ǥ��뤫��Ĵ�٤롣
'Groovy'.contains('oo')
�� true
���֤���
����������ʬʸ����νи��������Ȥ��롣
'Groovy Tool'.count('oo')
�� 2
���֤���
������Ϳ����줿�ǥ�ߥ�����Ѥ���ʸ�����ȡ����������Υȡ�����Υꥹ�Ȥ��֤����ǥ�ߥ������λ���Ͼ�ά�Ǥ��롣�ǥե���ȤǤ϶���ʸ�������Ѥ���롣
'apple^banana^grape'.tokenize('^')
�� ['apple', 'banana', 'grape']
���֤���
�о�ʸ���顢�����Ȥ���Ϳ����줿��ʬʸ����Τ����ǽ�˽и������Τ������롣
'Groovy Tool' - 'oo'
�� 'Grvy Tool'
���֤���
������Ϳ����줿��������о�ʸ������֤���
'Groovy'
* 3 �� 'GroovyGroovyGroovy'
���֤���
�ޤ��ϡ�J2SE 1.4 �Ǥ�����ɽ�����餤���Ƥ����������ˡ�Groovy ���ɤΤ褦�ˤ�����ĥ���Ƥ��뤫��������롣
J2SE 1.4 ������ɽ���� java.util.regex
�ѥå������Υ��饹�ǥ��ݡ��Ȥ���롣Pattern ���֥������Ȥϡ�����ѥ��뤵�줿����ɽ����ɽ����Pattern.compile("pattern")
��åɤ���������롣����ɽ����ʸˡ�� Pattern ���饹�� Javadoc �Dz��⤵��Ƥ��롣Matcher ���֥������Ȥϥޥå��о�ʸ������Ф���ޥå��η�̤��ݻ����롣Matcher ���֥������Ȥ� pattern.matcher("text")
��åɤ���������롣ñ��ʸ���ѥ�����˥ޥå�����Τ����Τꤿ���ΤǤ���С�matcher.matches()
��åɤ�Ȥ����ѥ�������ǥХå�����å����Ȥ��ˤϡ�������ɲäΥХå�����å��夬ɬ�פ���
Groovy ������ɽ����3����α黻�Ҥǥ��ݡ��Ȥ��롣
~"pattern"
�� Pattern ���֥������Ȥ��������롣����ϡ�Pattern.compile("pattern")
��Ʊ����̣�Ǥ��롣
"text" =~ "pattern"
�� Matcher ���֥������Ȥ��������롣����� Pattern.compile("pattern").matcher("text")
��Ʊ����̣�Ǥ��롣
"text" ==~ "pattern"
�� boolean �ͤ��֤�������� Pattern.compile("pattern").matcher("text").matches()
��Ʊ����̣�Ǥ��롣¾���ɲä��줿��åɤˤĤ��Ƥ� Pattern ���饹�� Matcher ���饹�� Javadoc �ȤΤ��ȡ�
����ץ������
pattern = "\\d{5}" // ���ֹ�˥ޥå�(5��) text = "63304" // ���ֹ� println text ==~ pattern // "true" �����Ϥ���� m = text =~ pattern println m.matches() // "true" �����Ϥ���� // ������Ǥϡ��ѥ�����ϥ�ƥ��ʸ����Ǥʤ���Фʤ�ʤ��� // �ѿ��ϻȤ��ʤ��� p = ~"\\d{5}" m = p.matcher(text) println m.matches() // "true" �����Ϥ����
Groovy �ǽ줿������ץȤΥ������ϡ����̤ϳ�ĥ�� ".groovy" �Υե��������������ץȤˤ�(��ͳ�ʽ����)�롼�������ơ��ȥ��ȡ����饹��°���ʤ���å�����������ƥ��饹������ޤޤ�Ƥ��롣
���Ȥ��С�
// �롼�������ơ��ȥ��� println 'loose statement' myMethod 'Mark', 19 println new MyClass(a1:'Running', a2:26.2) // ���饹��°���ʤ���åɤ���� def myMethod(p1, p2) { println "myMethod: p1=${p1}, p2=${p2}" } // 2�ĤΥץ��ѥƥ���1�ĤΥ�åɤ���ĥ��饹����� class MyClass { a1; a2 String toString() { "MyClass: a1=${a1}, a2=${a2}" } }
��åɤȥ��饹������ϡ����Ѥ����������ˤʤ��Ƥ�褤���롼������å�[*5]�ϳ������륹����ץȥե�������б����륯�饹�� static ��åɤȤ��ƥ���ѥ��뤵��롣���Ȥ��С�foo
�Ȥ���̾���Υ롼������åɤ���Bar.groovy
�Ȥ���̾���Υ�����ץȥե�����ˤ���С�Bar
���饹�� static ��å� foo
�Ȥ��ƥ���ѥ��뤵��롣�롼�������ơ��ȥ��Ȥϡ���ư��������� main
��åɤ���ƤӽФ���� run
��åɤˤޤȤ���롣
groovyc
����Ѥ��ƥ�����ץȤ�ѥ��뤷����硢����ѥ����Υ��饹�ˤϡ����٤ƤΥ롼�������ơ��ȥ��Ȥ��ޤȤ��줿 run
��åɤȡ����� run
��åɤ�ƤӽФ� main
��åɤ���ư���ɲä���롣
���ޤΤȤ�����������ץȤ���¾�Υ�����ץȤ�¹Ԥ��뤿��ˤϡ��¹Ԥ�����������ץȤ�ѥ��뤷������ݡ��Ȥ��ʤ���Фʤ�ʤ��������Զ��϶ᤤ�����˽��������Ϥ�����
[*5]����: ����Ū�ˤϤɤΥ��饹�ˤ�°���ʤ���åɡ�
Groovy ������α黻�ҤΥ����С������ɤݡ��Ȥ��Ƥ��롣�����С������ɲ�ǽ�ʱ黻�ҤϤ��줾�졢����Υ�åɤ��б��Ť����롣�б��Ť���줿��åɤ�������뤳�Ȥǡ����Υ��饹�Υ��֥������Ȥϥ�åɤ��б�����黻�Ҥ��С������ɤǤ��롣�����С��������б���åɤ��ͤ��ޤʥѥ����η��˸����ƥ����С������ɤ��뤳�Ȥ�Ǥ��롣
a == b
�� a.equals(b)
���б����롣
a != b
�� !a.equals(b)
���б����롣
a === b
�� Java �� a == b
���б����롣
a <=> b
�� a.compareTo(b)
���б����롣
a > b
�� a.compareTo(b) > 0
���б����롣
a >= b
�� a.compareTo(b) >= 0
���б����롣
a < b
�� a.compareTo(b) < 0
���б����롣
a <= b
�� a.compareTo(b) <= 0
���б����롣
��ӱ黻�Ҥ� null ��ϥ�ɥ뤹��Τǡ�NullPointerException �����Ф�ȯ�����ʤ���null �Ϥɤ�ʥ��֥������Ȥ��⾮������ΤȤ��ư����롣
Groovy �� ==
�黻�Ҥϡ�ξ�դΥ��֥������Ȥ������Ǥ��뤫��ƥ��Ȥ���===
�黻�Ҥ�ξ�դ�������Ʊ��Υ��֥������ȤǤ��뤫��ƥ��Ȥ��뤳�Ȥ����ա�
compareTo
��åɤ� int
���֤����֤����ͤϡ�a < b �ξ�������͡�a > b �ξ��������͡�Ʊ�ͤξ���0�Ǥ��롣
a + b
�� a.plus(b)
���б����롣
a - b
�� a.minus(b)
���б����롣
a * b
�� a.multiply(b)
���б����롣
a / b
�� a.divide(b)
���б����롣
a++
�� ++a
�� a.increment(b)
���б����롣
a--
�� --a
�� a.decrement(b)
���б����롣
a[b]
�� a.get(b)
���б����롣
a[b] = c
�� a.put(b, c)
���б����롣
����������Ȥϡ��ѥ����������뤳�Ȥ��ǽ�ʥ������ҤΤ��ȤǤ��롣�ġ��Υ���������ϡ�groovy.lang.Closure
��Ѿ��������������饹�Ȥ��ƥ���ѥ��뤵��롣����������ηѾ����饹�� call
��åɤ���ġ����Υ�åɤϥ���������μ¹Ԥȡ��ѥ������Ϥ���������Ѥ���롣����������ϡ����Ȥ��������줿�������פˤ����ѿ����ɤ߽Ǥ��롣�����������������������줿�ѿ��ϡ����������㤬��ư���줿�������פ�ͭ���ˤʤ롣������������ѿ����������Ƥ������Ȥ��Ǥ���������åɤ˰����Ȥ����Ϥ����Ȥ�Ǥ��롣������ħ�� List �� Map�������� String �Υ�åɤǰ��Ϥ�ȯ�����롣�ܤ����ϸ�Ҥ��롣
������������������ʸˡ�ϡ�
{ comma-separated-parameter-list | statements }
�ȤʤäƤ��롣���Ȥ��С�
closure = { bill, tipPercentage | bill * tipPercentage / 100 } tip = closure.call(25.19, 15) tip = closure(25.19, 15) // ��ιԤ�Ʊ����̣
�ְ�ä����Υѥ������Ϥ��ȡ� IncorrectClosureArgumentException
��ȯ�����롣
�ѥ�����1�ĤΥ���������Ǥϡ�it
������ɤ�Ȥ����Ȥ��Ǥ��롣���ΤȤ����ѥ����ꥹ�Ȥ��ά���ơ������ it
��Ȥäƥ��ơ��ȥ�����ǻ��ȤǤ��롣���Ȥ��С��ʲ��Υ���������Ϥ������Ʊ����̣�Ǥ��롣
{ x | println x } { println it }
�ʲ��� List �ȥ���������Ȥ�����˼���åɤΥ���ץ�Ǥ��롣���Υ���ץ�Ǥϥ롼������åɤȤ��ƽ�����������饹�Υ�åɤˤ�Ǥ��롣���Υ�åɤ� list �γ����Ǥ�����˥����������¹Ԥ����ʤ��� list �ƥ졼�Ȥ��롣�ƥ����������¹Ԥ�����̤Ȥ��� true ���֤��Ƥ������Ǥ� newList ���ɲä��롣�ƤӽФ����ˤ� newList ���֤���Groovy �� find
�� findAll
��åɤ����Ƥ���Τǡ����̤ϰʲ��Υ���ץ�Τ褦�ˤϽʤ����Ȥ����ա�
def List myFind(List list, Closure closure) { List newList = [] for (team in list) { if (closure.call team) newList.add team } newList }
myFind ��åɤ���Ѥ��륳���ɤ⼨���Ƥ�������
class Team { name; wins; losses } teams = [] teams.add new Team(name:'Rams', wins:12 , losses:4) teams.add new Team(name:'Raiders', wins:4 , losses:12) teams.add new Team(name:'Packers', wins:10 , losses:6) teams.add new Team(name:'49ers', wins:7 , losses:9) winningTeams = myFind(teams) { it.wins > it.losses } winningTeams.each { println it.name }
�ºݤˤ� myFind
�Τ褦�ʥ�åɤ�ɬ�פʤ����Ȥ����Τ⡢List ���饹�ˤϤ��餫���� findAll
��åɤ��Ѱդ���Ƥ��뤫������Ȥ����Ϥ�������
winningTeams = teams.findAll { it.wins > it.losses }
�ʲ��� Groovy Bean �Υ���ץ�ʥ���ץ����
class Car { String make String model }
���Υ��饹�ϥץ��ѥƥ���2��������Ƥ��뤬����åɤ�������Ƥ��ʤ��������������������Ǥ��ͤ��ޤʤ��Ȥ��Ԥ��Ƥ��롣���饹��ץ��ѥƥ��������ƥ�åɤΥ������פϥǥե���ȤǤ� public �Ǥ��롣public �� protected �Υץ��ѥƥ��ϡ���̤Ȥ��Ƥ� public/protected �� getter/setter ��åɤ���ư�������줿 private �ե�����ɤˤʤ롣�����Υ�åɤ��С��饤�ɤ��뤳�Ȥ��ȼ��ο�������������롣�ץ��ѥƥ�������Ū�� private
��������줿���ˤϡ�getter/setter �ϼ�ư��������ʤ���
�嵭�� Groovy �����ɤϡ��ʲ��� Java �����ɤ�Ʊ����̣�Ǥ��롣
public class Car { private String make; private String model; public String getMake() { return make; } public String getModel() { return model; } public void setMake(String make) { this.make = make; } public void setModel(String model) { this.model = model; } }
Groovy Bean �Ȥ�����������륯�饹�� java.lang.Object
���饹��Ѿ��������� groovy.lang.GroovyObject
���ե�������������롣���Υ��饹���ɲä�����åɤϡ�getProperty
��setProperty
��getMetaClass
��setMetaClass
������ invokeMethod
�Ǥ��롣groovy.lang.MetaClass
�ϥ��饹���Ф��ƥ�åɤ�¹Ի����ɲä��뤳�Ȥ��ǽ�ˤ��롣
Groovy Bean �Ǥ�̾���դ��ѥ��������Ѥ��ƥ������������뤳�Ȥ��Ǥ��롣���Ȥ��м��Υ����ɤǤϡ��ޤ� Car �ΰ���̵�����ȥ饯�����ƤФ졢���ˤ��줾��Υץ��ѥƥ��� setter ��åɤ��ƤФ�롣
myCar = new Car(make:'Toyota', model:'Camry')
Groovy List �� java.util.ArrayList
�Υ��������ꥹ�Ȥϥ�����ڤ���¤٤��ͤ�ѳ�̤ǰϤळ�Ȥ������Ǥ��롣���Ȥ��С�
cars = [new Car(make:'Honda', model:'Odyssey'), new Car(make:'Toyota', model:'Camry')] println cars[1] // Camry �Ȥ��� for (car in cars) { println car } // Car �� toString ��åɤ�ƤӽФ� class Car { make; model String toString() { "Car: make=${make}, model=${model}" } }
�ꥹ�Ȥ����Ǥ�ꥹ�ȤκǸ夫�饢����������ˤϡ�����ͤ�ǥå����˻��Ѥ��롣
���Υꥹ�Ȥ� []
�������Ǥ��롣��Ȥ��Ƥϡ�
cars = []
�ꥹ�Ȥ����Ǥ��ɲä�����ˡ��2���ढ�롣
cars.add car cars << car
�ꥹ�Ȥ����� array.toList()
��åɤ������Ǥ��롣����ϥꥹ�Ȥ��� list.toArray()
��åɤ������Ǥ��롣
Groovy �Ϥ����Ĥ��Υ�åɤ� java.util.List
���ɲä��Ƥ��롣
������Ϳ����줿���֥������Ȥ����������Ǥ��ꥹ����ˤ����Ĥ��뤫������롣
[1, 2, 3, 1].count(1)
�� 2
���֤���
���쥯������ immutable(�ѹ���ǽ)�ʥ��ԡ����������롣�����ˤ����äƤ� java.util.Collections
�� static �� unmodifiableList
��åɤ����Ѥ��Ƥ��롣���Ȥ��С�
list = [1, 2, 3].immutable() list.add 4 // java.lang.UnsupportedOperationException �������������
2�ĤΥꥹ�Ȥ˶��̤����Ǥ�ޤ���������ꥹ�Ȥ��������롣
[1, 2, 3, 4].intersect([2, 4, 6])
�� [2, 4]
���֤���
�ꥹ�Ȥ����Ǥ��줾����Ф��� toString
���ͤδ֤ˡ�������ʸ�������������Ϣ�뤹�롣���Ȥ��С������åȤ���ڤ�ʸ���Ȥ��ƥꥹ�Ȥ˴ޤޤ�뤹�٤Ƥ�ʸ�����Ϣ�뤷������� ['one', 'two', 'three'].join('^')
�Ƚ������ "one^two^three"
���֤���
�ꥹ�Ȥ����Ǥ��¤��ؤ����������ꥹ�Ȥ�������롣java.util.Comparator
��������������Ϥ����Ȥǥ����Ƚ���ѹ����뤳�Ȥ��Ǥ��롣
fruits = ['kiwi', 'strawberry', 'grape', 'banana'] // ���ιԤ� [banana, grape, kiwi, strawberry] ���֤��� sortedFruits = fruits.sort() // ���ιԤ� [kiwi, grape, banana, strawberry] ���֤��� sortedFruits = fruits.sort {l, r | return l.length() <=> r.length()}
�嵭�κǸ�ˤ��� sort
��åɸƤӽФ��ϡ������������ѥ����Ȥ����Ϥ�����ץ�Ǥ⤢�롣Groovy �ˤϥ����������ѥ����Ȥ����Ϥ����åɤ���¿���Ѱդ���Ƥ��롣
Groovy Bean �Ǥ�ʣ���Υץ��ѥƥ�����Ѥ��������Ȥ���ñ�ˤǤ��롣���Ȥ��С�Player
�Ȥ��� Bean �� name
��age
��score
�Ȥ����ץ��ѥƥ�������Ȥ��褦������ Bean �Υꥹ�Ȥ� players
�˳�Ǽ����Ƥ��ơ������ age
�� score
���ͤ����¤��ؤ���ˤϡ����Τ褦�˽�
players.sort { [it.age, it.score] }
java.util.Comparator
��������������Ϥ����Ȥǡ�Ƚ����ˡ���ѹ��Ǥ��롣���Ȥ��С��ʲ��Υ����ɤϥꥹ�Ȥ���Ǿ��ͤȺ����ͤ����롣[5, 9, 1, 6].min()
�� 1
���֤���[5, 9, 1, 6].max()
�� 9
���֤���
�ꥹ�Ȥ����Ǥޤ���ʸ����[*7]�ˤ���ʸ���ս���¤��ؤ��롣
[1, 2, 3].reverse()
�� [3, 2, 1]
���֤���
Groovy �� java.util.List
���֥������Ȥǻ��ѤǤ���褦�ˡ��û��ȸ����α黻�Ҥ��С������ɤ��Ƥ��롣
2�ĤΥꥹ�Ȥ��礷���������ꥹ�Ȥ��������롣��ʣ�������Ǥ����äƤ�������ʤ���
[1, 2, 3] + [2, 3, 4]
�� [1, 2, 3, 2, 3, 4]
���֤���
�ǽ�Υꥹ�Ȥ��������ܤΥꥹ�Ȥˤ������Ǥ��٤Ƥ���������ꥹ�Ȥ��������롣
[1, 2, 3, 4] - [2, 4, 6]
�� [1, 3]
���֤���
�ꥹ�Ȥ����Ǥ˥ץ�ߥƥ��ַ����ޤޤ�Ƥ��ʤ���С����Ǥ���Ӥˤ� equals
���Ȥ��롣
[*6]����: 1.0-beta4 �Ǥ�ʸ������Ф���min/max�ϼ¹ԤǤ��ʤ���
[*7]����: 1.0-beta4 �Ǥ�ʸ������Ф���reverse���¹ԤǤ��ʤ�����"abc".reverse()�פΤ褦�˥��å����դ���м¹Բ�ǽ�Ǥ�����
Groovy Map �ϡ�java.util.HashMap
�Υ��������ޥåפϥ�����ڤ���¤٤�����/�ͤΥڥ���ѳ�̤ǰϤळ�Ȥ������Ǥ��롣�������ͤȤϥ�����Ƕ��ڤ롣���Ȥ��С�
players = ['baseball':'Albert Pujols', 'golf':'Tiger Woods'] println players['golf'] // Tiger Woods ����Ϥ��� println players.golf // Tiger Woods ����Ϥ��� for (player in players) { println "${player.value} plays ${player.key}" } // ����Ͼ�Υ롼�פ�Ʊ����̣ players.each {player | println "${player.value} plays ${player.key}" }
���Υޥåפ� [:]
�������Ǥ��롣�ʲ��Ϥ��������
players = [:]
Groovy �� switch
ʸ�Ǥϡ����饹��List��Range��Pattern �ʤɡ������륪�֥������Ȥ�Ȥ��롣case
ʸ�� isCase
��åɤ�Ȥä��ͤ���Ӥ��롣��¿���Υ����С��饤�ɤ��줿 isCase
��åɤ�����Ƥ��롣����η��˸����Ƥ����ƥ����С������ɤ���ʤ��¤ꡢisCase
�� equals
��åɤ���Ѥ��롣
case
�����饹̾�Ǥ�����ˤϡ�isCase
��åɤ� instanceof
����Ѥ��롣
isCase
��åɤϡ��ȼ��˺����������饹�ǥ����С��饤�ɤ��뤳�Ȥ��Ǥ��롣
�ͤ��ޤʰۤʤ뷿���ͤ��б����� switch ʸ�Υ���ץ����
switch (x) { case 'Mark': println "got my name" break case 3..7: println 'got a number in the range 3 to 7 inclusive' break case ['Moe', 'Larry', 'Curly']: println 'got a Stooge name' break case java.util.Date: println 'got a Date object' break case ~"\\d{5}": println 'got a zip code' break default: println "got unexpected value ${x}" }
Range(�ϰϥ��֥�������)�� ".." �� "..." �黻�Ҥ���Ѥ����������롣����ץ������
3..7
�ϡ�3 ���� 7�פ�ɽ�� Range ���������롣
3...7
�ϡ�3 ���� 6�פ�ɽ�� Range ���������롣
"A".."D"
�ϡ�"A" ���� "D"�פ�ɽ�� Range ���������롣
"A"..."D"
�ϡ�"A" ���� "C"�פ�ɽ�� Range ���������롣
�ϰϥ��֥������� �� java.util.AbstractList
��Ѿ����� groovy.lang.Range
�����ե�������������륯�饹��ɽ������롣Range ���֥������Ȥ� immutable �ʥꥹ�Ȥ���Range ���ե������� getFrom
�� getTo
��åɤ��ɲä��Ƥ���Τǡ����¤Ⱦ�¤�����Ǥ��롣2����� Range ����������Ƥ��롣 groovy.lang.IntRange
�������ͤ˸¤ä��ϰϤ���IntRange �ˤ� contains
��åɤ��ɲä���Ƥ��ꡢ�ͤ��ϰ���ˤ��뤫��ƥ��ȤǤ��롣
groovy.lang.ObjectRange
�ǤϤ���¾�Τ����ʤ뷿�Ǥ��ϰϤ˴ޤ�뤳�Ȥ��Ǥ��롣�����Ǥ� java.lang.Comparable
��������Ƥ�����˸¤��롣
�ϰϥ��֥������Ȥϥ롼��¤�����Ω�ġ�������ϼ����������Ǽ��夲�롣
�ͤ��ϰϤ��̤��������֤�������Ԥ��ˤ�6�Ĥ���ˡ�����롣
for (i in 1..1000) { println i }
i = 1 while (i <= 1000) { println i; i++ }
(1..1000).each { println it }
1000.times { println it } // 0 ���� 999 �ޤǡ�
1.upto(1000) { println it }
1.step(1001, 1) { println it } // 1����1000�ޤǡ� // �ѥ������ͤΤҤȤļ����ǽ�λ���롣
List��Map��������String �Υ�åɤΤʤ��ˤϥ����������ѥ����Ȥ����Ϥ����åɤ����롣
���쥯���������Ǥޤ���ʸ�������ʸ�����Ф��Ʒ����֤�������Ԥ���java.util.Iterator
����������Ѥ��뤳�Ȥǡ����ʷ�ʥ����ɤҤǤ��롣���Ȥ��С��ꥹ�Ȥ����Ǥο��ͤ줾��ɽ�������褦�Ȼפ��С�
[5, 9, 1, 6].each {x | println x}
���뤤��
[5, 9, 1, 6].each {println it}
�Ƚ롣
���쥯�����ޤ���ʸ������Ѵ����ơ����������쥯�����(�ޤ���ʸ����)��������롣���Ȥ��С��ꥹ�Ȥγ����Ǥ��ͤ�2�ܤ������������Ǥ���ĥꥹ�Ȥ��������ˤϡ�
doubles = [5, 9, 1, 6].collect {x | x * 2}
�Ȥ��롣����� doubles
�� [10, 18, 2, 12]
�åȤ��롣
Ϳ����줿���˹��פ����Τ쥯���������Ǥޤ�ʸ�������ʸ�����鸡�������ǽ�˽и��������Ǥ��֤������Ȥ��С��ꥹ�Ȥ��椫��5�����礭���ǽ�����Ǥ���������С�
[5, 9, 1, 6].find {x | x > 5}
�Ƚ� 9
���֤äƤ��롣
Ϳ����줿���˹��פ����Τ쥯���������Ǥޤ���ʸ�������ʸ�����鸡�������и��������Ǥ��٤Ƥ�������֤������Ȥ��С��ꥹ�Ȥ��椫��5�����礭�����Ǥ٤Ƹ�����������С�
[5, 9, 1, 6].findAll {x | x > 5}
�Ƚ� [9, 6]
���֤äƤ��롣
���쥯���������Ǥޤ���ʸ�������ʸ�����٤Ƥ���Ϳ����줿���˹��פ��뤫��Ĵ�٤롣���Ȥ��С��ꥹ�Ȥ˴ޤޤ����������٤�7��꾮��������Ĵ�٤����ΤǤ���С�
[5, 9, 1, 6].every {x | x < 7}
�Ƚ� false
���֤äƤ��롣
���쥯���������Ǥޤ���ʸ�������ʸ���ˡ�Ϳ����줿���˹��פ����Τ��ҤȤĤǤ�¸�ߤ��뤫��Ĵ�٤롣���Ȥ��С��ꥹ�Ȥ˴ޤޤ�������7��꾮������Τ��ޤޤ�Ƥ��뤫��Ĵ�٤����ΤǤ���С�
[5, 9, 1, 6].any {x | x < 7}
�Ƚ� true
���֤äƤ��롣
�����֤��ν��ˤϡ��������Ϥ��줿�ͤ��Ȥ�졢���줾��η����֤��Ǥ�ɾ����̤�����ʹߤ��Ϥ���Ƥ��������Ȥ��С�5�γ�������ˤϡ����Τ褦�˽�(���ޤ긫�����ʤ�������ǤϤ��뤬)��
factorial = [2, 3, 4, 5].inject(1) { prevResult, x | prevResult * x }
���Υ���������ϡ�4��¹Ԥ���롣
1����: 1 * 2
2����: 2 * 3
3����: 6 * 4
4����: 24 * 5
��̤ϡ�120
�ˤʤ롣
����ץ륳���ɤ�(...) �ϥ����ɤξ�ά����
file = new File('myFile.txt') file.eachLine { println it } lineList = file.readLines()
file = new File('myFile.txt') file.eachByte { println it } byteList = file.readBytes()
dir = new File('directory-path') dir.eachFile { file | . . . }
Reader �ޤ��� InputStream �����ɤ߹��ळ���Υ�åɤϡ��㳰�������Ƥ��������Ĥ��뤳�Ȥ��ݾڤ���Ƥ��롣
file.withReader { reader | . . . } reader.withReader { reader | . . . } inputStream.withStream { is | . . . }
��������㳰���ꤲ��줿�Ȥ��Ƥ⡢Writer �ޤ��� OutputStream �ؤν��ߤ��Ĥ��뤳�Ȥ��ݾڤ��롣
file.withWriter { writer | . . . } file.withPrintWriter { pw | . . . } file.withOutputStream { os | . . . } writer.withWriter { writer | . . . } outputStream.withStream { os | . . . }
String ���ɲä���ˤϡ�
s = 'foo' s = s << 'bar'
StringBuffer ���ɲä���ˤϡ�
sb = new StringBuffer('foo') sb << 'bar'
List ���ɲä���ˤϡ�
colors = ['red', 'green'] colors << 'blue'
���ϥ��ȥ����������ɲä���ˤϡ�
w = new File('myFile.txt').newWriter() w << 'foo' << 'bar' w.close()
���֥������ȹ�¤(Object Graphs)�� XPath ����ʸˡ��é��ˤϡ��ɥå�(".")�黻�Ҥ���Ѥ��롣NullPointerException
�δ��������ˤϡ�"->" �� "." ������˻��Ѥ��롣���Ȥ��С�
class Team { String name Person coach players = [] } class Person { String name } p = new Person(name:'Mike Martz') t = new Team(name:'Rams', coach:p) // ���ιԤϡ�team.getCoach().getName ��Ʊ����̤���Ϥ��� println "coach = ${t.coach.name}" t = new Team(name:'Blues') // ���ιԤ� null ���֤��Τ����� // NullPointerException ��ȯ�����ʤ� println "coach = ${t->coach->name}" // ���ιԤ� NullPointerException ��ȯ������ println "coach = ${t.coach.name}"
���륪�֥������Ȥ� Class
���֥������Ȥ�������������ˡ�Java �Ǥ� someObject.getClass()
�Ƚ�Groovy ��Ʊ�����Ȥ�Ԥ��ˤϡ�someObject.class
�Ƚ�
���饹̾���� Class
���֥������Ȥ�������������ϡ�Java �Ǥ� Groovy �Ǥ� SomeClass.class
�ޤ��� Class.forName("pkg.SomeClass")
�Ƚ�
Groovy �� GString
���饹�Υ�å�̾�����ɽ����������С����Τ褦�˽�
GString.class.methods.each { println it.name }
Java �� java.util.List
���ե������Υ�å�̾�����ɽ����������С����Τ褦�˽�
java.util.List.class.methods.each { println it.name }
���饹�ˤϡ�̤�����Υ�åɤ��Ф���ƤӽФ���å����륳���ɤ���Ȥ��Ǥ��롣���Ȥ��С�
o = new CatchCall() // ���ιԤ� "unknown method Mark called with [19]" ��ɽ������ println o.foo("Mark", 19) class CatchCall { invokeMethod(String name, Object args) { try { return metaClass.invokeMethod(this, name, args) } catch (MissingMethodException e) { // �����˳μ¤˸ƤӽФ����å�̾�Ȱ����ǤθƤӽФ��� // �Ԥ������å���Ƥ�褤 return "unknown method ${name} called with ${args}" } } }
Groovy Markup �� ��Ҥ� invokeMethod
��åɤ���Ѥ���¸�ߤ��ʤ���åɤθƤӽФ���å����������֥Ρ��ɡפ��Ѵ����롣��åɤΰ����ϥΡ��ɤ�°���Ȥ��ư����롣��åɤ��Ϥ��줿����������ϥΡ��ɤΥ���ƥ�ĤȤ��ư����롣Groovy Markup �Ǥ��ͤ��ޤ�����ˡ���Ѱդ���Ƥ���:
NodeBuilder
)DOMBuilder
)SAXBuilder
)MarkupBuilder
)AntBuilder
)SwingBuilder
)
����˲ä��ơ��ȼ��Υӥ�����������ˤ� groovy.util.BuilderSupport
���饹��Ѿ�����Ф褤��
MarkupBuilder
����Ѥ��� HTML ���������륵��ץ����
import groovy.xml.MarkupBuilder
mb = new MarkupBuilder()
mb.html() {
head() {
title("This is my title.")
}
body() {
p("This is my paragraph.")
}
}
println mb[*8]
���줬�������� HTML �ϼ��Τ褦�ˤʤ롣
<html> <head> <title>This is my title.</title> </head> <body> <p>This is my paragraph.</p> </body> </html>
MarkupBuilder
����Ѥ��� XML ���������륵��ץ����
import groovy.xml.MarkupBuilder;
mb = new MarkupBuilder()
mb.autos() {
auto(year:2001, color:'blue') {
make('Toyota')
model('Camry')
}
}
println mb[*9]
���줬�������� XML �ϼ��Τ褦�ˤʤ롣
<autos> <auto year='2001' color='blue'> <make>Toyota</make> <model>Camry</model> </auto> </autos>
[*8]����: mb.html() ��åɤμ¹Ի�����ɸ����Ϥ�HTML�����Ϥ����Τǡ�����ץ����Ū��ͤ���Ȥ��Υ��ơ��ȥ��ȤϾ�Ĺ��MarkupBuilder�μ¹Է�̤�ʸ����Ȥ���mb�����ꤷ�����������Ĥ���ˤ�륵��ץ륳�����ȡ�
[*9]����: mb.autos() ��åɤμ¹Ի�����ɸ����Ϥ�XML�����Ϥ����Τǡ�����ץ����Ū��ͤ���Ȥ��Υ��ơ��ȥ��ȤϾ�Ĺ��MarkupBuilder�μ¹Է�̤�ʸ����Ȥ���mb�����ꤷ�����������Ĥ���ˤ�륵��ץ륳�����ȡ�
Groovy �� JDBC ���ñ�ˤ��롣groovy.sql.Sql
���饹�ϥ�����μ¹Ԥ� ResultSet
�ԤΥ��ƥ졼�Ȥ��ñ�˹Ԥ���ˡ�����롣���Υ���ץ�Ǥϡ�MusicCollection
�ϥǡ����١�����̾��(���ξ��ϡ���Ͽ���줿 ODBC �ǡ���������)�ǡ� Artists
���ǡ����١����Υơ��֥�̾��Name
���ơ��֥�Υ����̾����
import groovy.sql.Sql dbURL = 'jdbc:odbc:MusicCollection' jdbcDriver = 'sun.jdbc.odbc.JdbcOdbcDriver' sql = Sql.newInstance(dbURL, jdbcDriver) sql.eachRow('select * from Artists') { println it.Name }
Groovlet �� Groovy �ˤ�롢�����֥�åȤ� JSP �����ذƤǤ��롣Groovlet �ϰʲ��ΰ����ѿ������롣
out
- HttpServletResponse#getWriter
��åɤ��֤����request
- HttpServletRequest
session
- HttpSession
Groovlet �Υ���ץ�������Υ����ɤ� SimpleGroovlet.groovy
�ߤ�����̾������¸���롣�ޤ��������ɤ� HTML �ν��Ϥ˥ҥ��ɥ�����Ȥ���Ѥ��Ƥ��롣
out.println <<<EOS <html> <head> <title>My Simple Groovlet</title> </head> <body> <h1>My Simple Groovlet</h1> <p>Today is ${new java.util.Date()}.</p> </body> </html> EOS
GroovyServlet
�� Groovlet ��ѥ��뤷���ե����뤬�ѹ������ޤǥ���å��夹�롣�ƥ���ѥ�����ѹ����˼�ưŪ�˹Ԥ��롣 GroovyServlet
�� web.xml ����Ͽ���ʤ���Фʤ�ʤ���
�ʲ��� web.xml
�ե�����Υ���ץ������GroovyServlet
����Ͽ��ʬ�������������Ƥ��ʤ���
<?xml version="1.0"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>Groovy</servlet-name> <servlet-class>groovy.servlet.GroovyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Groovy</servlet-name> <url-pattern>*.groovy</url-pattern> </servlet-mapping> </web-app>
Groovlet �Υǥץ����ˤ� Ant ��Ȥ��Τ��ɤ�������������Ū�ʼ���:
*.groovy
) ��ȥåץ�٥�γ��ؤ�����WEB-INF
�ǥ��쥯�ȥ�� web.xml
������groovy*.jar
�� asm*.jar
�ե������ WEB-INF/lib
�ǥ��쥯�ȥ�����������Ԥ������ Ant �ӥ�ɥե�����Ϥ�������
build.dir=build src.dir=src # Groovlet ���֤���Ƥ���ǥ��쥯�ȥ� groovy.dir=${src.dir}/groovy # web.xml ���֤���Ƥ���ǥ��쥯�ȥ� web.dir=${src.dir}/web # WAR �ե������������ѥ� war.file=${build.dir}/${ant.project.name}.war # WAR �ե�����Υǥץ����� webapps.dir=${env.TOMCAT_HOME}/webapps # WAR �ե�����˴ޤ��٤� JAR �ե����� asm.jar=${env.GROOVY_HOME}/lib/asm-1.4.1.jar groovy.jar=${env.GROOVY_HOME}/lib/groovy-1.0-beta-4-snapshot.jar
<project name="GroovletExample" default="deploy"> <property environment="env"/> <property file="build.properties"/> <target name="prepare"> <mkdir dir="${build.dir}"/> </target> <target name="war" depends="prepare" description="creates WAR file"> <war destfile="${war.file}" webxml="${web.dir}/web.xml"> <fileset dir="${groovy.dir}"/> <lib file="${groovy.jar}"/> <lib file="${asm.jar}"/> </war> </target> <target name="deploy" depends="war" description="deploys WAR file"> <delete dir="${webapps.dir}/${ant.project.name}"/> <delete file="${webapps.dir}/${war.file}"/> <copy file="${war.file}" todir="${webapps.dir}"/> </target> </project>
����ץ�� Groovlet ���ǥץ������줿�顢�����֥֥饦������ http://localhost:8080/GroovletExamples/SimpleGroovlet.groovy �ǥ��������Ǥ��롣GroovletExample �� Web ���ץꥱ��������̾���ǡ�SimpleGroovylet.groovy �� Groovlet ��̾���������Υޥåԥ� web.xml
����Ͽ����Ƥ��� GroovyServlet
�� url-pattern
�ǹԤ��롣
Groovy �Ϥޤ������ǤϤʤ���Groovy �������������ˤϡ� http://groovy.codehaus.org �˥����������� Issue Tracker �Υ��å�����Ф褤�� �����Ǥϡ���𤵤�Ƥ���������椫�餤���Ĥ���ԥå����åפ��롣 ������Ƥ��Ƥ��������ֹ��ʻ��������
*
�����Ѥ�̤���ݡ���(84)[*14]��
[*10]����: 1.0-beta4 �ǥ��ݡ��Ȥ��줿��
[*11]����: 1.0-rc1 �ǥ��ݡ���ͽ�꤫��
[*12]����: 1.0-beta4 �ǥ��ݡ��Ȥ��줿��
[*13]����: 1.0-rc1 �ǥ��ݡ���ͽ�ꡣ
[*14]����: 1.0-beta4 �ǥ��ݡ��Ȥ��줿��
[*15]����: 1.0�ǽ������ǥ��ݡ���ͽ�ꡣ
[*16]����: 1.1�ǥ��ݡ���ͽ�ꡣ
�����ܵ����Ǥϡġ� Groovy ��ʸˡ�ȵ�ǽ�Τ����Ĥ��ä���ή���Ƥߤ��� Groovy ������ Java ���硼�ȥ��åȤϡ����ʤ�����������夲������������������ä� Groovy ��ڤ���Ǥߤ����Ȼפä������������������ɤ��ɤߤ䤹���ʤꤽ������������������Ȥ��ɤߤŤ餯�ʤꤽ�����������������ʤ�����Υե����ɥХå���ȤƤ�ڤ��ߤ��Ƥ��롣����[email protected]
�˥�뤷���ߤ���[*17]���ޤ����ե����ɥХå��� Groovy �Υ��ꥹ��(�����˾ܺ٤�����)�Ǥⶦͭ�������Ȼפ���
[*17]����: ���ܸ����˴ؤ���ե����ɥХå��� [email protected] �ؤ��ꤤ���ޤ���