diff --git a/core-groovy-2/gmavenplus-pom.xml b/core-groovy-2/gmavenplus-pom.xml
new file mode 100644
index 0000000000..54c89b9834
--- /dev/null
+++ b/core-groovy-2/gmavenplus-pom.xml
@@ -0,0 +1,178 @@
+
+
+ 4.0.0
+ core-groovy-2
+ 1.0-SNAPSHOT
+ core-groovy-2
+ jar
+
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+ org.codehaus.groovy
+ groovy-all
+ ${groovy.version}
+ pom
+
+
+ org.junit.platform
+ junit-platform-runner
+ ${junit.platform.version}
+ test
+
+
+ org.hsqldb
+ hsqldb
+ ${hsqldb.version}
+ test
+
+
+ org.spockframework
+ spock-core
+ ${spock-core.version}
+ test
+
+
+
+
+ src/main/groovy
+ src/main/java
+
+
+ org.codehaus.gmavenplus
+ gmavenplus-plugin
+ 1.7.0
+
+
+
+ execute
+ addSources
+ addTestSources
+ generateStubs
+ compile
+ generateTestStubs
+ compileTests
+ removeStubs
+ removeTestStubs
+
+
+
+
+
+ org.codehaus.groovy
+ groovy-all
+
+ ${groovy.version}
+ runtime
+ pom
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+
+ org.junit.platform
+ junit-platform-surefire-provider
+ ${junit.platform.version}
+
+
+
+
+ junit5
+
+ integration-test
+ verify
+
+
+
+ **/*Test5.java
+
+
+
+
+
+
+ maven-surefire-plugin
+ 2.20.1
+
+ false
+
+ **/*Test.java
+ **/*Spec.java
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 3.1.0
+
+
+
+ jar-with-dependencies
+
+
+
+
+ com.baeldung.MyJointCompilationApp
+
+
+
+
+
+
+ make-assembly
+
+ package
+
+ single
+
+
+
+
+
+
+
+
+
+ central
+ http://jcenter.bintray.com
+
+
+
+
+ UTF-8
+ 1.0.0
+ 2.4.0
+ 1.1-groovy-2.4
+ 3.9
+ 1.8
+ 1.2.3
+ 2.5.7
+ 1.6
+
+
+
diff --git a/core-groovy-2/pom.xml b/core-groovy-2/pom.xml
index 77de9c8fc8..b945546c8a 100644
--- a/core-groovy-2/pom.xml
+++ b/core-groovy-2/pom.xml
@@ -1,6 +1,6 @@
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-groovy-2
1.0-SNAPSHOT
@@ -15,25 +15,20 @@
- org.codehaus.groovy
- groovy
- ${groovy.version}
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
org.codehaus.groovy
groovy-all
- ${groovy-all.version}
- pom
-
-
- org.codehaus.groovy
- groovy-dateutil
${groovy.version}
-
-
- org.codehaus.groovy
- groovy-sql
- ${groovy-sql.version}
+ pom
org.junit.platform
@@ -56,21 +51,35 @@
+ src/main/groovy
+ src/main/java
- org.codehaus.gmavenplus
- gmavenplus-plugin
- ${gmavenplus-plugin.version}
-
-
-
- addSources
- addTestSources
- compile
- compileTests
-
-
-
+ org.codehaus.groovy
+ groovy-eclipse-compiler
+ 3.3.0-01
+ true
+
+
+ maven-compiler-plugin
+ 3.8.0
+
+ groovy-eclipse-compiler
+ ${java.version}
+ ${java.version}
+
+
+
+ org.codehaus.groovy
+ groovy-eclipse-compiler
+ 3.3.0-01
+
+
+ org.codehaus.groovy
+ groovy-eclipse-batch
+ ${groovy.version}-01
+
+
maven-failsafe-plugin
@@ -101,13 +110,42 @@
maven-surefire-plugin
2.20.1
- false
-
- **/*Test.java
- **/*Spec.java
-
+ false
+
+ **/*Test.java
+ **/*Spec.java
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 3.1.0
+
+
+
+ jar-with-dependencies
+
+
+
+
+ com.baeldung.MyJointCompilationApp
+
+
+
+
+
+
+ make-assembly
+
+ package
+
+ single
+
+
+
+
@@ -118,14 +156,32 @@
+
+
+ bintray
+ Groovy Bintray
+ https://dl.bintray.com/groovy/maven
+
+
+ never
+
+
+ false
+
+
+
+
+
1.0.0
- 2.5.6
- 2.5.6
- 2.5.6
2.4.0
1.1-groovy-2.4
- 1.6
+ 3.9
+ 1.8
+ 3.8.1
+ 1.2.3
+ 2.5.7
+ UTF-8
diff --git a/core-groovy-2/src/main/groovy/com/baeldung/CalcMath.groovy b/core-groovy-2/src/main/groovy/com/baeldung/CalcMath.groovy
new file mode 100644
index 0000000000..0e233793b2
--- /dev/null
+++ b/core-groovy-2/src/main/groovy/com/baeldung/CalcMath.groovy
@@ -0,0 +1,25 @@
+package com.baeldung
+
+import org.slf4j.LoggerFactory
+
+class CalcMath {
+ def log = LoggerFactory.getLogger(this.getClass())
+
+ def calcSum(x, y) {
+ log.info "Executing $x + $y"
+ x + y
+ }
+
+ /**
+ * example of method that in java would throw error at compile time
+ * @param x
+ * @param y
+ * @return
+ */
+ def calcSum2(x, y) {
+ log.info "Executing $x + $y"
+ // DANGER! This won't throw a compilation issue and fail only at runtime!!!
+ calcSum3()
+ log.info("Logging an undefined variable: $z")
+ }
+}
\ No newline at end of file
diff --git a/core-groovy-2/src/main/groovy/com/baeldung/CalcScript.groovy b/core-groovy-2/src/main/groovy/com/baeldung/CalcScript.groovy
new file mode 100644
index 0000000000..84615b2217
--- /dev/null
+++ b/core-groovy-2/src/main/groovy/com/baeldung/CalcScript.groovy
@@ -0,0 +1,16 @@
+package com.baeldung
+
+def calcSum(x, y) {
+ x + y
+}
+
+def calcSum2(x, y) {
+ // DANGER! The variable "log" may be undefined
+ log.info "Executing $x + $y"
+ // DANGER! This method doesn't exist!
+ calcSum3()
+ // DANGER! The logged variable "z" is undefined!
+ log.info("Logging an undefined variable: $z")
+}
+
+calcSum(1,5)
diff --git a/core-groovy-2/src/main/java/com/baeldung/MyJointCompilationApp.java b/core-groovy-2/src/main/java/com/baeldung/MyJointCompilationApp.java
new file mode 100644
index 0000000000..c49f6edc30
--- /dev/null
+++ b/core-groovy-2/src/main/java/com/baeldung/MyJointCompilationApp.java
@@ -0,0 +1,120 @@
+package com.baeldung;
+
+import groovy.lang.*;
+import groovy.util.GroovyScriptEngine;
+import groovy.util.ResourceException;
+import groovy.util.ScriptException;
+import org.codehaus.groovy.jsr223.GroovyScriptEngineFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import javax.script.ScriptEngine;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+/**
+ * Hello world!
+ *
+ */
+public class MyJointCompilationApp {
+ private final static Logger LOG = LoggerFactory.getLogger(MyJointCompilationApp.class);
+ private final GroovyClassLoader loader;
+ private final GroovyShell shell;
+ private final GroovyScriptEngine engine;
+ private final ScriptEngine engineFromFactory;
+
+ public MyJointCompilationApp() {
+ loader = new GroovyClassLoader(this.getClass().getClassLoader());
+ shell = new GroovyShell(loader, new Binding());
+
+ URL url = null;
+ try {
+ url = new File("src/main/groovy/com/baeldung/").toURI().toURL();
+ } catch (MalformedURLException e) {
+ LOG.error("Exception while creating url", e);
+ }
+ engine = new GroovyScriptEngine(new URL[] {url}, this.getClass().getClassLoader());
+ engineFromFactory = new GroovyScriptEngineFactory().getScriptEngine();
+ }
+
+ private void addWithCompiledClasses(int x, int y) {
+ LOG.info("Executing {} + {}", x, y);
+ Object result1 = new CalcScript().calcSum(x, y);
+ LOG.info("Result of CalcScript.calcSum() method is {}", result1);
+
+ Object result2 = new CalcMath().calcSum(x, y);
+ LOG.info("Result of CalcMath.calcSum() method is {}", result2);
+ }
+
+ private void addWithGroovyShell(int x, int y) throws IOException {
+ Script script = shell.parse(new File("src/main/groovy/com/baeldung/", "CalcScript.groovy"));
+ LOG.info("Executing {} + {}", x, y);
+ Object result = script.invokeMethod("calcSum", new Object[] { x, y });
+ LOG.info("Result of CalcScript.calcSum() method is {}", result);
+ }
+
+ private void addWithGroovyShellRun() throws IOException {
+ Script script = shell.parse(new File("src/main/groovy/com/baeldung/", "CalcScript.groovy"));
+ LOG.info("Executing script run method");
+ Object result = script.run();
+ LOG.info("Result of CalcScript.run() method is {}", result);
+ }
+
+ private void addWithGroovyClassLoader(int x, int y) throws IllegalAccessException, InstantiationException, IOException {
+ Class calcClass = loader.parseClass(
+ new File("src/main/groovy/com/baeldung/", "CalcMath.groovy"));
+ GroovyObject calc = (GroovyObject) calcClass.newInstance();
+ Object result = calc.invokeMethod("calcSum", new Object[] { x + 14, y + 14 });
+ LOG.info("Result of CalcMath.calcSum() method is {}", result);
+ }
+
+ private void addWithGroovyScriptEngine(int x, int y) throws IllegalAccessException,
+ InstantiationException, ResourceException, ScriptException {
+ Class calcClass = engine.loadScriptByName("CalcMath.groovy");
+ GroovyObject calc = calcClass.newInstance();
+ //WARNING the following will throw a ClassCastException
+ //((CalcMath)calc).calcSum(1,2);
+ Object result = calc.invokeMethod("calcSum", new Object[] { x, y });
+ LOG.info("Result of CalcMath.calcSum() method is {}", result);
+ }
+
+ private void addWithEngineFactory(int x, int y) throws IllegalAccessException,
+ InstantiationException, javax.script.ScriptException, FileNotFoundException {
+ Class calcClass = (Class) engineFromFactory.eval(
+ new FileReader(new File("src/main/groovy/com/baeldung/", "CalcMath.groovy")));
+ GroovyObject calc = (GroovyObject) calcClass.newInstance();
+ Object result = calc.invokeMethod("calcSum", new Object[] { x, y });
+ LOG.info("Result of CalcMath.calcSum() method is {}", result);
+ }
+
+ private void addWithStaticCompiledClasses() {
+ LOG.info("Running the Groovy classes compiled statically...");
+ addWithCompiledClasses(5, 10);
+
+ }
+
+ private void addWithDynamicCompiledClasses() throws IOException, IllegalAccessException, InstantiationException,
+ ResourceException, ScriptException, javax.script.ScriptException {
+ LOG.info("Invocation of a dynamic groovy script...");
+ addWithGroovyShell(5, 10);
+ LOG.info("Invocation of the run method of a dynamic groovy script...");
+ addWithGroovyShellRun();
+ LOG.info("Invocation of a dynamic groovy class loaded with GroovyClassLoader...");
+ addWithGroovyClassLoader(10, 30);
+ LOG.info("Invocation of a dynamic groovy class loaded with GroovyScriptEngine...");
+ addWithGroovyScriptEngine(15, 0);
+ LOG.info("Invocation of a dynamic groovy class loaded with GroovyScriptEngine JSR223...");
+ addWithEngineFactory(5, 6);
+ }
+
+ public static void main(String[] args) throws InstantiationException, IllegalAccessException,
+ ResourceException, ScriptException, IOException, javax.script.ScriptException {
+ MyJointCompilationApp myJointCompilationApp = new MyJointCompilationApp();
+ LOG.info("Example of addition operation via Groovy scripts integration with Java.");
+ myJointCompilationApp.addWithStaticCompiledClasses();
+ myJointCompilationApp.addWithDynamicCompiledClasses();
+ }
+}