【groovy】增加groovy模块

pull/3/head
fengshuonan 2021-01-30 21:31:00 +08:00
parent f2e386ae01
commit d092f2f099
16 changed files with 339 additions and 0 deletions

View File

@ -0,0 +1,3 @@
# groovy模块
动态执行java代码

View File

@ -0,0 +1 @@
groovy的api模块

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>kernel-d-groovy</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>groovy-api</artifactId>
<packaging>jar</packaging>
<dependencies>
</dependencies>
</project>

View File

@ -0,0 +1,41 @@
package cn.stylefeng.roses.kernel.groovy.api;
/**
* groovyapi
*
* @author fengshuonan
* @date 2021/1/22 16:29
*/
public interface GroovyApi {
/**
* javaclass
*
* @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);
/**
* javaclass
*
* @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);
}

View File

@ -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";
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -0,0 +1 @@
groovy模块的实现

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>kernel-d-groovy</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>groovy-sdk</artifactId>
<packaging>jar</packaging>
<dependencies>
<!--groovy的api-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>groovy-api</artifactId>
<version>1.0.0</version>
</dependency>
<!--groovy工具-->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -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);
}
}
}

View File

@ -0,0 +1 @@
groovy的spring boot自动加载模块

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>kernel-d-groovy</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>groovy-spring-boot-starter</artifactId>
<packaging>jar</packaging>
<dependencies>
<!--groovy的sdk-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>groovy-sdk</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>

View File

@ -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();
}
}

View File

@ -0,0 +1,2 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.stylefeng.roses.kernel.groovy.starter.GunsGroovyAutoConfiguration

35
kernel-d-groovy/pom.xml Normal file
View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>roses-kernel</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>kernel-d-groovy</artifactId>
<packaging>pom</packaging>
<modules>
<module>groovy-api</module>
<module>groovy-sdk</module>
<module>groovy-spring-boot-starter</module>
</modules>
<dependencies>
<!-- 开发规则 -->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>kernel-a-rule</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>

12
pom.xml
View File

@ -49,6 +49,9 @@
<!--文件操作模块-->
<module>kernel-d-file</module>
<!--动态代码执行-->
<module>kernel-d-groovy</module>
<!--文件操作模块-->
<module>kernel-d-i18n</module>
@ -110,6 +113,7 @@
<minio.version>3.0.10</minio.version>
<rocketmq.version>4.5.2</rocketmq.version>
<easy.captcha>1.6.2</easy.captcha>
<groovy.version>3.0.7</groovy.version>
</properties>
<dependencyManagement>
@ -254,6 +258,14 @@
<version>${easy.captcha}</version>
</dependency>
<!-- groovy动态代码执行 -->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${groovy.version}</version>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>