diff --git a/cloud-rule-common/src/main/java/com/muyu/common/domain/RuleVersion.java b/cloud-rule-common/src/main/java/com/muyu/common/domain/RuleVersion.java index d9c5632..73a4f0b 100644 --- a/cloud-rule-common/src/main/java/com/muyu/common/domain/RuleVersion.java +++ b/cloud-rule-common/src/main/java/com/muyu/common/domain/RuleVersion.java @@ -81,4 +81,11 @@ public class RuleVersion extends BaseEntity { .build(); } + public static RuleVersion updBuild(RuleVersionUpdReq ruleVersionUpdReq, Supplier idSupplier) { + return RuleVersion.builder() + .ruleId(idSupplier.get()) + .ruleVersionText(ruleVersionUpdReq.getRuleVersionActivate()) + .build(); + + } } diff --git a/cloud-rule-engine/src/main/java/com/muyu/compile/ExternalClassLoader.java b/cloud-rule-engine/src/main/java/com/muyu/compile/ExternalClassLoader.java new file mode 100644 index 0000000..32fe50b --- /dev/null +++ b/cloud-rule-engine/src/main/java/com/muyu/compile/ExternalClassLoader.java @@ -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); + } +} diff --git a/cloud-rule-engine/src/main/java/com/muyu/load/OSSFileLoad.java b/cloud-rule-engine/src/main/java/com/muyu/load/OSSFileLoad.java index f1e4857..6fc46db 100644 --- a/cloud-rule-engine/src/main/java/com/muyu/load/OSSFileLoad.java +++ b/cloud-rule-engine/src/main/java/com/muyu/load/OSSFileLoad.java @@ -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); } diff --git a/cloud-rule-engine/src/main/java/com/muyu/util/SourceCodeCompiler.java b/cloud-rule-engine/src/main/java/com/muyu/util/SourceCodeCompiler.java index f046533..994187d 100644 --- a/cloud-rule-engine/src/main/java/com/muyu/util/SourceCodeCompiler.java +++ b/cloud-rule-engine/src/main/java/com/muyu/util/SourceCodeCompiler.java @@ -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 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){ diff --git a/cloud-rule-server/src/main/java/com/muyu/controller/RuleVersionController.java b/cloud-rule-server/src/main/java/com/muyu/controller/RuleVersionController.java index 22c1eb6..87d269c 100644 --- a/cloud-rule-server/src/main/java/com/muyu/controller/RuleVersionController.java +++ b/cloud-rule-server/src/main/java/com/muyu/controller/RuleVersionController.java @@ -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 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 updText( + @PathVariable("ruleVersionId") Long ruleVersionId, + @Validated @RequestBody RuleVersionUpdReq ruleVersionUpdReq + ){ + ruleVersionService.updateById(RuleVersion.updBuild(ruleVersionUpdReq,() -> ruleVersionId)); + return Result.success(null,"操作成功"); + } + + + }