Groovy Add-on » History » Version 21
Henning Blohm, 24.02.2020 16:39
1 | 1 | Udo Offermann | h1. Groovy Add-on |
---|---|---|---|
2 | 2 | Udo Offermann | |
3 | 21 | Henning Blohm | The Groovy Add-on allows to use the "Groovy language":http://groovy.codehaus.org/ within z2 applications. It supports pure Groovy modules as well as modules containing both Java and Groovy source code. |
4 | 3 | Udo Offermann | |
5 | 17 | Henning Blohm | h2. Repository |
6 | 1 | Udo Offermann | |
7 | 17 | Henning Blohm | "z2-addons-groovy":https://redmine.z2-environment.net/projects/z2-addons/repository/z2-addons-groovy |
8 | |||
9 | h2. Version map |
||
10 | |||
11 | |_. add-on version |_. Groovy version | |
||
12 | 1 | Udo Offermann | | v2.2, v2.3 | 2.0.6 | |
13 | 21 | Henning Blohm | | v2.4 | 2.3.11 | |
14 | | v2.7 | 2.5.4 | |
||
15 | | v2.8, master | 3.0.1 | |
||
16 | 1 | Udo Offermann | |
17 | h2. How does it work? |
||
18 | |||
19 | 21 | Henning Blohm | The z2-Groovy compiler checks for each source component (i.e. @java/src.api@ and @java/src.impl@ ) whether it contains pure Groovy source files or Java and Groovy sources and chooses the appropriate compiler. |
20 | 3 | Udo Offermann | |
21 | 21 | Henning Blohm | The Joint-Compiler of Groovy SDK compiles mixed Groovy and Java sources within three passes: In step 1) all Groovy classes are compiled as stubs (i.e. only the signatures w/o any lines of code) so that in step 2) the Java compiler from the JDK can compile all Java classes and resolve all dependencies to Groovy classes using the stubs. In step 3) the Groovy source files are translated into bytecode - since the Java classes are now translated, references from Groovy to Java can be also resolved correctly. |
22 | If however no Java sources are found step 1 and 2 are skipped and the compilation process is speed-up by leaving only the plain Groovy compiler! |
||
23 | 3 | Udo Offermann | |
24 | 21 | Henning Blohm | A mixture of Groovy classes and Java classes across z2 modules is supported as well. Since cyclic dependencies are not allowed this does not even require the Groovy Joint-Compiler. |
25 | 3 | Udo Offermann | |
26 | h2. How do I use it? |
||
27 | 1 | Udo Offermann | |
28 | 10 | Udo Offermann | h3. 1) Include the Groovy Add-on |
29 | |||
30 | 14 | Henning Blohm | At first you need to add the Groovy Add-on repository to your environment with @gitcr.uri=http://git.z2-environment.net/z2-addons.groovy@ (see also the @environment@ module of [[Sample-groovy-in-Z2]]). |
31 | 6 | Udo Offermann | |
32 | @environment/groovyAddon.properties:@ |
||
33 | 21 | Henning Blohm | |
34 | 6 | Udo Offermann | <pre> |
35 | com.zfabrik.systemStates.participation=com.zfabrik.boot.main/sysrepo_up |
||
36 | |||
37 | # git stored component repository |
||
38 | 1 | Udo Offermann | com.zfabrik.component.type=com.zfabrik.gitcr |
39 | 6 | Udo Offermann | |
40 | # true <=> optional repository. If gitcr.uri is invalid, then this gitcr will be ignore silently |
||
41 | gitcr.optional=true |
||
42 | |||
43 | # this can also point to a remote repository like |
||
44 | # ssh://myserver/some/git/repo |
||
45 | 21 | Henning Blohm | gitcr.uri=https://www.z2-environment.net/git/z2-addons.groovy |
46 | 6 | Udo Offermann | |
47 | # the git branch to use (e.g. 'master') |
||
48 | gitcr.branch=master |
||
49 | 10 | Udo Offermann | </pre> |
50 | |||
51 | 1 | Udo Offermann | h3. 2) Write code |
52 | |||
53 | 21 | Henning Blohm | Put Groovy source files into the same structure as Java source files - i.e. @<module-name>/java/src.api@ , @<module-name>/java/src.impl@ or @<module-name>/java/src.test@ (see the @com.zfabrik.samples.groovy.web@ module of [[Sample-groovy-in-Z2]]). |
54 | 3 | Udo Offermann | |
55 | 11 | Udo Offermann | h3. 3) Define compile order |
56 | 10 | Udo Offermann | |
57 | 3 | Udo Offermann | Edit the Java component descriptor and change/add the @java.compile.order@ property: |
58 | |||
59 | @<module-name>/java/z.properties:@ |
||
60 | 21 | Henning Blohm | |
61 | <pre><code> |
||
62 | 3 | Udo Offermann | com.zfabrik.component.type=com.zfabrik.java |
63 | java.privateReferences=... |
||
64 | java.publicReferences=... |
||
65 | |||
66 | 1 | Udo Offermann | java.compile.order = groovy |
67 | </code></pre> |
||
68 | 5 | Udo Offermann | |
69 | When using Spring with AspectJ the compile order will be: |
||
70 | 21 | Henning Blohm | |
71 | 8 | Udo Offermann | @java.compile.order = groovy, spring_aspectj@ |
72 | 21 | Henning Blohm | |
73 | 10 | Udo Offermann | h3. 4) Adjust memory settings |
74 | 3 | Udo Offermann | |
75 | You might need to change the heap and the perm size settings of the web worker in your environment since Groovy is usually more memory hungry than Java. |
||
76 | |||
77 | 1 | Udo Offermann | @environment/webWorker.properties:@ |
78 | 21 | Henning Blohm | |
79 | <pre><code> |
||
80 | 3 | Udo Offermann | ... |
81 | worker.process.vmOptions=\ |
||
82 | -Xmx128m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -XX:MaxPermSize=256m \ |
||
83 | 1 | Udo Offermann | ... |
84 | 20 | Henning Blohm | </code></pre> |
85 | |||
86 | h2. Trouble Shooting |
||
87 | |||
88 | h3. Trouble running code in Eclipse |
||
89 | |||
90 | 21 | Henning Blohm | When working with Groovy code in Eclipse and having resolved a module's classpath with the Eclipsoid plugin you will have the Groovy libraries coming with this addon on the Eclipse project classpath. Eclipse's Groovy support plugin brings its own version of the groovy-all library that may (and typically will) differ from the add-on's version. |
91 | 20 | Henning Blohm | |
92 | 21 | Henning Blohm | You will see an error message of the form |
93 | 20 | Henning Blohm | |
94 | <pre> |
||
95 | groovy-all is loaded in version x.y.z and you are trying to load version a.b.c |
||
96 | </pre> |
||
97 | |||
98 | 1 | Udo Offermann | *Fix:* Remove the Groovy Libraries classpath container from your project by opening the project properties, choosing "Java build path" and "Libraries". |