feat():测试

yuan
yuan 2024-09-04 19:42:26 +08:00
parent 3e97c2fb02
commit 6fe767e404
5 changed files with 87 additions and 24 deletions

View File

@ -81,4 +81,11 @@ public class RuleVersion extends BaseEntity {
.build();
}
public static RuleVersion updBuild(RuleVersionUpdReq ruleVersionUpdReq, Supplier<Long> idSupplier) {
return RuleVersion.builder()
.ruleId(idSupplier.get())
.ruleVersionText(ruleVersionUpdReq.getRuleVersionActivate())
.build();
}
}

View File

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

View File

@ -1,14 +1,18 @@
package com.muyu.load;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.muyu.common.core.domain.Result;
import com.muyu.compile.OSSFileCompile;
import com.muyu.util.SourceCodeCompiler;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Map;
/**
@ -76,22 +80,27 @@ public class OSSFileLoad {
}
//对路径里的.java文件进行编译
System.out.println("第一步");
OSSFileCompile.compile("home/"+fileName);
// SourceCodeCompiler.javaCompilerFile("home/"+fileName);
// System.out.println("第二步");
// File outputDir = new File("home/"); // 或者是你指定的其他输出目录
// System.out.println("第三步");
// File[] classFiles = outputDir.listFiles(); // 获取输出目录中的所有文件
// if (classFiles != null) {
// for (File classFile : classFiles) {
// if (classFile.getName().endsWith(".class")) {
// System.out.println("找到class文件 " + classFile.getName());
// }
// }
// //把.class文件存入oss中
// }else {
// System.out.println("没有找到文件");
// }
// OSSFileCompile.compile("home/"+fileName);
SourceCodeCompiler.javaCompilerPath("home/");
System.out.println("第二步");
File outputDir = new File("home/"); // 或者是你指定的其他输出目录
System.out.println("第三步");
File[] classFiles = outputDir.listFiles(); // 获取输出目录中的所有文件
if (classFiles != null) {
for (File classFile : classFiles) {
if (classFile.getName().endsWith(".class")) {
System.out.println("找到class文件 " + classFile.getName());
// 把.class文件存入oss中
}
}
}else {
System.out.println("没有找到文件");
}
return Result.success(source);
}

View File

@ -3,14 +3,13 @@ package com.muyu.util;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import javax.tools.*;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.util.*;
public class SourceCodeCompiler {
@ -61,8 +60,9 @@ public class SourceCodeCompiler {
try {
//通过源文件获取到想要编译的java类源代码迭代器包括所有的内部类其中每一个类都是一个JavaFileObjects也被称为一个汇编单元
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();
}catch (Exception e){

View File

@ -132,7 +132,13 @@ public class RuleVersionController {
return Result.success(ruleVersionService.generatedCode(ruleVersion));
}
/**
* class
* @return
* @throws IOException
*/
@PostMapping("/loadClass")
@Operation(summary = "加载class文件",description = "在进行编译java类时需先加载class文件")
public Result<Object> OSSLoadFileClass() throws IOException {
Load.streamingDownload("DataEngineRecordActuator.class");
Load.streamingDownload("DataEngineSetActuator.class");
@ -141,4 +147,22 @@ public class RuleVersionController {
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,"操作成功");
}
}