diff --git a/kernel-d-groovy/README.md b/kernel-d-groovy/README.md
new file mode 100644
index 000000000..e3e5b2f2d
--- /dev/null
+++ b/kernel-d-groovy/README.md
@@ -0,0 +1,3 @@
+# groovy模块
+
+动态执行java代码
\ No newline at end of file
diff --git a/kernel-d-groovy/groovy-api/README.md b/kernel-d-groovy/groovy-api/README.md
new file mode 100644
index 000000000..f080c585d
--- /dev/null
+++ b/kernel-d-groovy/groovy-api/README.md
@@ -0,0 +1 @@
+groovy的api模块
\ No newline at end of file
diff --git a/kernel-d-groovy/groovy-api/pom.xml b/kernel-d-groovy/groovy-api/pom.xml
new file mode 100644
index 000000000..ba56eaa94
--- /dev/null
+++ b/kernel-d-groovy/groovy-api/pom.xml
@@ -0,0 +1,22 @@
+
+
+ 4.0.0
+
+
+ cn.stylefeng.roses
+ kernel-d-groovy
+ 1.0.0
+ ../pom.xml
+
+
+ groovy-api
+
+ jar
+
+
+
+
+
+
diff --git a/kernel-d-groovy/groovy-api/src/main/java/cn/stylefeng/roses/kernel/groovy/api/GroovyApi.java b/kernel-d-groovy/groovy-api/src/main/java/cn/stylefeng/roses/kernel/groovy/api/GroovyApi.java
new file mode 100644
index 000000000..0fa958001
--- /dev/null
+++ b/kernel-d-groovy/groovy-api/src/main/java/cn/stylefeng/roses/kernel/groovy/api/GroovyApi.java
@@ -0,0 +1,41 @@
+package cn.stylefeng.roses.kernel.groovy.api;
+
+/**
+ * groovy动态脚本操作api
+ *
+ * @author fengshuonan
+ * @date 2021/1/22 16:29
+ */
+public interface GroovyApi {
+
+ /**
+ * 将文本形式的java类转换成class对象
+ *
+ * @param javaClassCode java类的文本信息
+ * @author fengshuonan
+ * @date 2021/1/22 16:30
+ */
+ Class> textToClass(String javaClassCode);
+
+ /**
+ * 执行java语句
+ *
+ * @param javaCode java语句的文本信息
+ * @author fengshuonan
+ * @date 2021/1/22 16:31
+ */
+ Object executeShell(String javaCode);
+
+ /**
+ * 将java类代码转换成class,并执行某个方法
+ *
+ * @param javaClassCode java类的代码
+ * @param method java类中某个方法名
+ * @param parameterTypes 参数类型集合
+ * @param args 参数的具体对象
+ * @author fengshuonan
+ * @date 2021/1/22 16:31
+ */
+ Object executeClassMethod(String javaClassCode, String method, Class>[] parameterTypes, Object[] args);
+
+}
diff --git a/kernel-d-groovy/groovy-api/src/main/java/cn/stylefeng/roses/kernel/groovy/api/constants/GroovyConstants.java b/kernel-d-groovy/groovy-api/src/main/java/cn/stylefeng/roses/kernel/groovy/api/constants/GroovyConstants.java
new file mode 100644
index 000000000..4a185a698
--- /dev/null
+++ b/kernel-d-groovy/groovy-api/src/main/java/cn/stylefeng/roses/kernel/groovy/api/constants/GroovyConstants.java
@@ -0,0 +1,21 @@
+package cn.stylefeng.roses.kernel.groovy.api.constants;
+
+/**
+ * groovy常量
+ *
+ * @author fengshuonan
+ * @date 2021/1/22 16:38
+ */
+public interface GroovyConstants {
+
+ /**
+ * groovy模块的名称
+ */
+ String GROOVY_MODULE_NAME = "kernel-d-groovy";
+
+ /**
+ * 异常枚举的步进值
+ */
+ String GROOVY_EXCEPTION_STEP_CODE = "26";
+
+}
diff --git a/kernel-d-groovy/groovy-api/src/main/java/cn/stylefeng/roses/kernel/groovy/api/exception/GroovyException.java b/kernel-d-groovy/groovy-api/src/main/java/cn/stylefeng/roses/kernel/groovy/api/exception/GroovyException.java
new file mode 100644
index 000000000..ecd2cb17e
--- /dev/null
+++ b/kernel-d-groovy/groovy-api/src/main/java/cn/stylefeng/roses/kernel/groovy/api/exception/GroovyException.java
@@ -0,0 +1,23 @@
+package cn.stylefeng.roses.kernel.groovy.api.exception;
+
+import cn.stylefeng.roses.kernel.groovy.api.constants.GroovyConstants;
+import cn.stylefeng.roses.kernel.rule.abstracts.AbstractExceptionEnum;
+import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
+
+/**
+ * groovy脚本执行异常
+ *
+ * @author fengshuonan
+ * @date 2021/1/22 16:36
+ */
+public class GroovyException extends ServiceException {
+
+ public GroovyException(AbstractExceptionEnum exception, String userTip) {
+ super(GroovyConstants.GROOVY_MODULE_NAME, exception.getErrorCode(), userTip);
+ }
+
+ public GroovyException(AbstractExceptionEnum exception) {
+ super(GroovyConstants.GROOVY_MODULE_NAME, exception);
+ }
+
+}
diff --git a/kernel-d-groovy/groovy-api/src/main/java/cn/stylefeng/roses/kernel/groovy/api/exception/enums/GroovyExceptionEnum.java b/kernel-d-groovy/groovy-api/src/main/java/cn/stylefeng/roses/kernel/groovy/api/exception/enums/GroovyExceptionEnum.java
new file mode 100644
index 000000000..bb1fc59c1
--- /dev/null
+++ b/kernel-d-groovy/groovy-api/src/main/java/cn/stylefeng/roses/kernel/groovy/api/exception/enums/GroovyExceptionEnum.java
@@ -0,0 +1,37 @@
+package cn.stylefeng.roses.kernel.groovy.api.exception.enums;
+
+import cn.stylefeng.roses.kernel.groovy.api.constants.GroovyConstants;
+import cn.stylefeng.roses.kernel.rule.abstracts.AbstractExceptionEnum;
+import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
+import lombok.Getter;
+
+/**
+ * groovy脚本执行异常的枚举
+ *
+ * @author fengshuonan
+ * @date 2021/1/22 16:36
+ */
+@Getter
+public enum GroovyExceptionEnum implements AbstractExceptionEnum {
+
+ /**
+ * groovy脚本执行异常的枚举
+ */
+ GROOVY_EXE_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + GroovyConstants.GROOVY_EXCEPTION_STEP_CODE + "01", "执行groovy类中方法出错");
+
+ /**
+ * 错误编码
+ */
+ private final String errorCode;
+
+ /**
+ * 提示用户信息
+ */
+ private final String userTip;
+
+ GroovyExceptionEnum(String errorCode, String userTip) {
+ this.errorCode = errorCode;
+ this.userTip = userTip;
+ }
+
+}
diff --git a/kernel-d-groovy/groovy-sdk/README.md b/kernel-d-groovy/groovy-sdk/README.md
new file mode 100644
index 000000000..24bfcc4c4
--- /dev/null
+++ b/kernel-d-groovy/groovy-sdk/README.md
@@ -0,0 +1 @@
+groovy模块的实现
\ No newline at end of file
diff --git a/kernel-d-groovy/groovy-sdk/pom.xml b/kernel-d-groovy/groovy-sdk/pom.xml
new file mode 100644
index 000000000..ad1c8dfd3
--- /dev/null
+++ b/kernel-d-groovy/groovy-sdk/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+
+ cn.stylefeng.roses
+ kernel-d-groovy
+ 1.0.0
+ ../pom.xml
+
+
+ groovy-sdk
+
+ jar
+
+
+
+
+
+ cn.stylefeng.roses
+ groovy-api
+ 1.0.0
+
+
+
+
+ org.codehaus.groovy
+ groovy
+
+
+
+
+
diff --git a/kernel-d-groovy/groovy-sdk/src/main/java/cn/stylefeng/roses/kernel/groovy/GroovyOperator.java b/kernel-d-groovy/groovy-sdk/src/main/java/cn/stylefeng/roses/kernel/groovy/GroovyOperator.java
new file mode 100644
index 000000000..1023b5497
--- /dev/null
+++ b/kernel-d-groovy/groovy-sdk/src/main/java/cn/stylefeng/roses/kernel/groovy/GroovyOperator.java
@@ -0,0 +1,46 @@
+package cn.stylefeng.roses.kernel.groovy;
+
+import cn.stylefeng.roses.kernel.groovy.api.GroovyApi;
+import cn.stylefeng.roses.kernel.groovy.api.exception.GroovyException;
+import cn.stylefeng.roses.kernel.groovy.api.exception.enums.GroovyExceptionEnum;
+import groovy.lang.GroovyClassLoader;
+import groovy.lang.GroovyShell;
+import lombok.extern.slf4j.Slf4j;
+
+import java.lang.reflect.Method;
+
+/**
+ * groovy动态脚本操作实现
+ *
+ * @author fengshuonan
+ * @date 2021/1/22 16:28
+ */
+@Slf4j
+public class GroovyOperator implements GroovyApi {
+
+ @Override
+ public Class> textToClass(String javaClassCode) {
+ GroovyClassLoader groovyClassLoader = new GroovyClassLoader();
+ return (Class>) groovyClassLoader.parseClass(javaClassCode);
+ }
+
+ @Override
+ public Object executeShell(String javaCode) {
+ GroovyShell shell = new GroovyShell();
+ return shell.evaluate(javaCode);
+ }
+
+ @Override
+ public Object executeClassMethod(String javaClassCode, String method, Class>[] parameterTypes, Object[] args) {
+ try {
+ Class> clazz = this.textToClass(javaClassCode);
+ Method clazzMethod = clazz.getMethod(method, parameterTypes);
+ Object obj = clazz.newInstance();
+ return clazzMethod.invoke(obj, args);
+ } catch (Exception e) {
+ log.error("执行groovy类中方法出错!", e);
+ throw new GroovyException(GroovyExceptionEnum.GROOVY_EXE_ERROR);
+ }
+ }
+
+}
diff --git a/kernel-d-groovy/groovy-spring-boot-starter/README.md b/kernel-d-groovy/groovy-spring-boot-starter/README.md
new file mode 100644
index 000000000..3f1f3a04a
--- /dev/null
+++ b/kernel-d-groovy/groovy-spring-boot-starter/README.md
@@ -0,0 +1 @@
+groovy的spring boot自动加载模块
\ No newline at end of file
diff --git a/kernel-d-groovy/groovy-spring-boot-starter/pom.xml b/kernel-d-groovy/groovy-spring-boot-starter/pom.xml
new file mode 100644
index 000000000..e19827f19
--- /dev/null
+++ b/kernel-d-groovy/groovy-spring-boot-starter/pom.xml
@@ -0,0 +1,29 @@
+
+
+ 4.0.0
+
+
+ cn.stylefeng.roses
+ kernel-d-groovy
+ 1.0.0
+ ../pom.xml
+
+
+ groovy-spring-boot-starter
+
+ jar
+
+
+
+
+
+ cn.stylefeng.roses
+ groovy-sdk
+ 1.0.0
+
+
+
+
+
diff --git a/kernel-d-groovy/groovy-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/groovy/starter/GunsGroovyAutoConfiguration.java b/kernel-d-groovy/groovy-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/groovy/starter/GunsGroovyAutoConfiguration.java
new file mode 100644
index 000000000..9d4fd5b4d
--- /dev/null
+++ b/kernel-d-groovy/groovy-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/groovy/starter/GunsGroovyAutoConfiguration.java
@@ -0,0 +1,30 @@
+package cn.stylefeng.roses.kernel.groovy.starter;
+
+import cn.stylefeng.roses.kernel.groovy.GroovyOperator;
+import cn.stylefeng.roses.kernel.groovy.api.GroovyApi;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Groovy的自动配置
+ *
+ * @author fengshuonan
+ * @date 2021/1/29 11:23
+ */
+@Configuration
+public class GunsGroovyAutoConfiguration {
+
+ /**
+ * Groovy的操作类
+ *
+ * @author fengshuonan
+ * @date 2021/1/29 11:23
+ */
+ @Bean
+ @ConditionalOnMissingBean(GroovyApi.class)
+ public GroovyApi fileOperatorApi() {
+ return new GroovyOperator();
+ }
+
+}
diff --git a/kernel-d-groovy/groovy-spring-boot-starter/src/main/resources/META-INF/spring.factories b/kernel-d-groovy/groovy-spring-boot-starter/src/main/resources/META-INF/spring.factories
new file mode 100644
index 000000000..fe69a9729
--- /dev/null
+++ b/kernel-d-groovy/groovy-spring-boot-starter/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+ cn.stylefeng.roses.kernel.groovy.starter.GunsGroovyAutoConfiguration
diff --git a/kernel-d-groovy/pom.xml b/kernel-d-groovy/pom.xml
new file mode 100644
index 000000000..fd8069446
--- /dev/null
+++ b/kernel-d-groovy/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+
+ cn.stylefeng.roses
+ roses-kernel
+ 1.0.0
+ ../pom.xml
+
+
+ kernel-d-groovy
+
+ pom
+
+
+ groovy-api
+ groovy-sdk
+ groovy-spring-boot-starter
+
+
+
+
+
+
+ cn.stylefeng.roses
+ kernel-a-rule
+ 1.0.0
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index db4791b8f..01a41ba3d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,6 +49,9 @@
kernel-d-file
+
+ kernel-d-groovy
+
kernel-d-i18n
@@ -110,6 +113,7 @@
3.0.10
4.5.2
1.6.2
+ 3.0.7
@@ -254,6 +258,14 @@
${easy.captcha}
+
+
+ org.codehaus.groovy
+ groovy-all
+ ${groovy.version}
+ pom
+
+