feat():测试
parent
3e97c2fb02
commit
6fe767e404
|
@ -81,4 +81,11 @@ public class RuleVersion extends BaseEntity {
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static RuleVersion updBuild(RuleVersionUpdReq ruleVersionUpdReq, Supplier<Long> idSupplier) {
|
||||||
|
return RuleVersion.builder()
|
||||||
|
.ruleId(idSupplier.get())
|
||||||
|
.ruleVersionText(ruleVersionUpdReq.getRuleVersionActivate())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.muyu.compile;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLClassLoader;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
public class ExternalClassLoader extends URLClassLoader {
|
||||||
|
|
||||||
|
public ExternalClassLoader(URL[] urls) {
|
||||||
|
super(urls, Thread.currentThread().getContextClassLoader());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class<?> defineClassFromBytes(byte[] classBytes, String className) throws IOException {
|
||||||
|
return super.defineClass(className, classBytes, 0, classBytes.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class<?> loadClassFromPath(Path classFilePath, String className) throws IOException {
|
||||||
|
byte[] classData = Files.readAllBytes(classFilePath);
|
||||||
|
return defineClassFromBytes(classData, className);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,14 +1,18 @@
|
||||||
package com.muyu.load;
|
package com.muyu.load;
|
||||||
|
|
||||||
|
import com.aliyun.oss.OSS;
|
||||||
import com.aliyun.oss.OSSClient;
|
import com.aliyun.oss.OSSClient;
|
||||||
|
import com.aliyun.oss.OSSClientBuilder;
|
||||||
import com.aliyun.oss.model.GetObjectRequest;
|
import com.aliyun.oss.model.GetObjectRequest;
|
||||||
import com.aliyun.oss.model.OSSObject;
|
import com.aliyun.oss.model.OSSObject;
|
||||||
import com.aliyun.oss.model.ObjectMetadata;
|
import com.aliyun.oss.model.ObjectMetadata;
|
||||||
|
import com.aliyun.oss.model.PutObjectRequest;
|
||||||
import com.muyu.common.core.domain.Result;
|
import com.muyu.common.core.domain.Result;
|
||||||
import com.muyu.compile.OSSFileCompile;
|
import com.muyu.compile.OSSFileCompile;
|
||||||
import com.muyu.util.SourceCodeCompiler;
|
import com.muyu.util.SourceCodeCompiler;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -76,22 +80,27 @@ public class OSSFileLoad {
|
||||||
}
|
}
|
||||||
//对路径里的.java文件进行编译
|
//对路径里的.java文件进行编译
|
||||||
System.out.println("第一步");
|
System.out.println("第一步");
|
||||||
OSSFileCompile.compile("home/"+fileName);
|
// OSSFileCompile.compile("home/"+fileName);
|
||||||
// SourceCodeCompiler.javaCompilerFile("home/"+fileName);
|
SourceCodeCompiler.javaCompilerPath("home/");
|
||||||
// System.out.println("第二步");
|
System.out.println("第二步");
|
||||||
// File outputDir = new File("home/"); // 或者是你指定的其他输出目录
|
File outputDir = new File("home/"); // 或者是你指定的其他输出目录
|
||||||
// System.out.println("第三步");
|
System.out.println("第三步");
|
||||||
// File[] classFiles = outputDir.listFiles(); // 获取输出目录中的所有文件
|
File[] classFiles = outputDir.listFiles(); // 获取输出目录中的所有文件
|
||||||
// if (classFiles != null) {
|
if (classFiles != null) {
|
||||||
// for (File classFile : classFiles) {
|
for (File classFile : classFiles) {
|
||||||
// if (classFile.getName().endsWith(".class")) {
|
if (classFile.getName().endsWith(".class")) {
|
||||||
// System.out.println("找到class文件 " + classFile.getName());
|
System.out.println("找到class文件 " + classFile.getName());
|
||||||
// }
|
|
||||||
// }
|
// 把.class文件存入oss中
|
||||||
// //把.class文件存入oss中
|
|
||||||
// }else {
|
|
||||||
// System.out.println("没有找到文件");
|
|
||||||
// }
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}else {
|
||||||
|
System.out.println("没有找到文件");
|
||||||
|
}
|
||||||
return Result.success(source);
|
return Result.success(source);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,14 +3,13 @@ package com.muyu.util;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import javax.tools.JavaCompiler;
|
import javax.tools.*;
|
||||||
import javax.tools.JavaFileObject;
|
|
||||||
import javax.tools.StandardJavaFileManager;
|
|
||||||
import javax.tools.ToolProvider;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Arrays;
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
import java.io.OutputStreamWriter;
|
||||||
import java.util.List;
|
import java.io.PrintWriter;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
public class SourceCodeCompiler {
|
public class SourceCodeCompiler {
|
||||||
|
|
||||||
|
@ -61,8 +60,9 @@ public class SourceCodeCompiler {
|
||||||
try {
|
try {
|
||||||
//通过源文件获取到想要编译的java类源代码迭代器,包括所有的内部类,其中每一个类都是一个JavaFileObjects,也被称为一个汇编单元
|
//通过源文件获取到想要编译的java类源代码迭代器,包括所有的内部类,其中每一个类都是一个JavaFileObjects,也被称为一个汇编单元
|
||||||
Iterable<? extends JavaFileObject> javaFileObjects = fileManager.getJavaFileObjects(file);
|
Iterable<? extends JavaFileObject> javaFileObjects = fileManager.getJavaFileObjects(file);
|
||||||
|
String[] strings = {"-classpath","/home","-verbose","-d", "/home"};
|
||||||
//生成编译任务
|
//生成编译任务
|
||||||
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null, Arrays.asList("-d","home/"), null, javaFileObjects);
|
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null, List.of(strings), null, javaFileObjects);
|
||||||
//执行编译任务
|
//执行编译任务
|
||||||
task.call();
|
task.call();
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
|
|
|
@ -132,7 +132,13 @@ public class RuleVersionController {
|
||||||
return Result.success(ruleVersionService.generatedCode(ruleVersion));
|
return Result.success(ruleVersionService.generatedCode(ruleVersion));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载class文件
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
@PostMapping("/loadClass")
|
@PostMapping("/loadClass")
|
||||||
|
@Operation(summary = "加载class文件",description = "在进行编译java类时需先加载class文件")
|
||||||
public Result<Object> OSSLoadFileClass() throws IOException {
|
public Result<Object> OSSLoadFileClass() throws IOException {
|
||||||
Load.streamingDownload("DataEngineRecordActuator.class");
|
Load.streamingDownload("DataEngineRecordActuator.class");
|
||||||
Load.streamingDownload("DataEngineSetActuator.class");
|
Load.streamingDownload("DataEngineSetActuator.class");
|
||||||
|
@ -141,4 +147,22 @@ public class RuleVersionController {
|
||||||
return Result.success();
|
return Result.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过ID修改版本代码
|
||||||
|
* @param ruleVersionId
|
||||||
|
* @param ruleVersionUpdReq
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PutMapping("/updText/{ruleVersionId}")
|
||||||
|
@Operation(summary = "通过ID修改规则版本代码",description = "进行版本更新时操作")
|
||||||
|
public Result<Object> updText(
|
||||||
|
@PathVariable("ruleVersionId") Long ruleVersionId,
|
||||||
|
@Validated @RequestBody RuleVersionUpdReq ruleVersionUpdReq
|
||||||
|
){
|
||||||
|
ruleVersionService.updateById(RuleVersion.updBuild(ruleVersionUpdReq,() -> ruleVersionId));
|
||||||
|
return Result.success(null,"操作成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue