mirror of https://gitee.com/stylefeng/roses
【groovy】增加groovy模块
parent
f2e386ae01
commit
d092f2f099
|
@ -0,0 +1,3 @@
|
|||
# groovy模块
|
||||
|
||||
动态执行java代码
|
|
@ -0,0 +1 @@
|
|||
groovy的api模块
|
|
@ -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>
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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";
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
groovy模块的实现
|
|
@ -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>
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
groovy的spring boot自动加载模块
|
|
@ -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>
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||
cn.stylefeng.roses.kernel.groovy.starter.GunsGroovyAutoConfiguration
|
|
@ -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
12
pom.xml
|
@ -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>
|
||||
|
||||
|
|
Loading…
Reference in New Issue