From a71a996367940743837d3b984d14fa07c11966a7 Mon Sep 17 00:00:00 2001 From: yuan <1363654894@qq.com> Date: Thu, 5 Sep 2024 22:31:45 +0800 Subject: [PATCH] =?UTF-8?q?feat():=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ileCompile.java => FilesCompilerLoad.java} | 55 ++++++++-------- .../main/java/com/muyu/load/OSSFileLoad.java | 66 ++++++++++++++++++- .../java/com/muyu/upload/ALiYunUpload.java | 5 +- 3 files changed, 97 insertions(+), 29 deletions(-) rename cloud-rule-engine/src/main/java/com/muyu/compile/{JavaFileCompile.java => FilesCompilerLoad.java} (58%) diff --git a/cloud-rule-engine/src/main/java/com/muyu/compile/JavaFileCompile.java b/cloud-rule-engine/src/main/java/com/muyu/compile/FilesCompilerLoad.java similarity index 58% rename from cloud-rule-engine/src/main/java/com/muyu/compile/JavaFileCompile.java rename to cloud-rule-engine/src/main/java/com/muyu/compile/FilesCompilerLoad.java index d772f5a..963ff02 100644 --- a/cloud-rule-engine/src/main/java/com/muyu/compile/JavaFileCompile.java +++ b/cloud-rule-engine/src/main/java/com/muyu/compile/FilesCompilerLoad.java @@ -21,13 +21,12 @@ import java.nio.file.Paths; * @name:OSSFileCompile * @Date:2024/8/31 下午7:08 */ -public class JavaFileCompile { +public class FilesCompilerLoad { - private static final Logger log = LoggerFactory.getLogger(JavaFileCompile.class); + private static final Logger log = LoggerFactory.getLogger(FilesCompilerLoad.class); - public static Result compile(String fileName){ + public static Result javaCompiler(String fileName){ -// try { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); String[] strings = {"-classpath","/home/lib","-verbose","-d", "/home/lib","home/"+fileName + MethodSuffix.JAVASUFFIX }; @@ -40,7 +39,6 @@ public class JavaFileCompile { System.out.println("编译失败"); } - try { String classContent = ""; BufferedReader bufferedReader = new BufferedReader(new FileReader("/home/lib/com/muyu/generate/"+fileName+ MethodSuffix.CLASSSUFFIX)); @@ -57,28 +55,33 @@ public class JavaFileCompile { e.printStackTrace(); } -// // class文件路径 -// String externalClassFilePath = "/home/lib/com/muyu/generate/"+fileName+ MethodSuffix.CLASSSUFFIX; -// log.info(externalClassFilePath); -// Path path = Paths.get(externalClassFilePath); -// -// String externalClassDir = externalClassFilePath.substring(0, externalClassFilePath.lastIndexOf("/")); -// -// URL[] urls = new URL[]{new File(externalClassDir).toURI().toURL()}; -// -// ExternalClassLoader externalClassLoader = new ExternalClassLoader(urls); -// -// // 加载类 -// // 注意类名必须是完全限定名(包括包名) -// Class clazz = externalClassLoader.loadClassFromPath(path, "/home/lib/com/muyu/generate/"+fileName+ MethodSuffix.CLASSSUFFIX); -// System.out.println(clazz); -// -// } catch (MalformedURLException e) { -// throw new RuntimeException(e); -// } catch (IOException e) { -// throw new RuntimeException(e); -// } + return Result.success(); + } + public static Result classLoad(String fileName){ + + try { + // class文件路径 + String externalClassFilePath = "/home/lib/com/muyu/generate/"+fileName+ MethodSuffix.CLASSSUFFIX; + log.info(externalClassFilePath); + Path path = Paths.get(externalClassFilePath); + + String externalClassDir = externalClassFilePath.substring(0, externalClassFilePath.lastIndexOf("/")); + + URL[] urls = new URL[]{new File(externalClassDir).toURI().toURL()}; + + ExternalClassLoader externalClassLoader = new ExternalClassLoader(urls); + + // 加载类 + // 注意类名必须是完全限定名(包括包名) + Class clazz = externalClassLoader.loadClassFromPath(path, "/home/lib/com/muyu/generate/"+fileName+ MethodSuffix.CLASSSUFFIX); + System.out.println(clazz); + + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } return Result.success(); } 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 d9ec54b..58fc173 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 @@ -2,7 +2,7 @@ package com.muyu.load; import com.aliyun.oss.OSSClient; import com.muyu.common.core.domain.Result; -import com.muyu.compile.JavaFileCompile; +import com.muyu.compile.FilesCompilerLoad; import com.muyu.constant.MethodSuffix; import java.io.*; @@ -71,7 +71,69 @@ public class OSSFileLoad { } //对路径里的.java文件进行编译 System.out.println("执行编译"); - JavaFileCompile.compile(fileName); + FilesCompilerLoad.javaCompiler(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); + } + + public static Result streamingClassDownload(String fileName) throws IOException { + String source = null; + // 创建 OSSClient 实例 + OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); + // 判断 bucket 是否存在 + Boolean flag_bucket = ossClient.doesBucketExist(bucketName); + if (!flag_bucket) { + System.out.println("bucket不存在"); + return Result.error("bucket不存在"); + } + Boolean flag_file = ossClient.doesObjectExist(bucketName, fileJavaPath+fileName+ MethodSuffix.CLASSSUFFIX); + if (!flag_file) { + System.out.println("预下载文件不存在"); + return Result.error("预下载文件不存在"); + } + // 本地文件下载路径 + String localPath = "home/class/" + fileName + MethodSuffix.CLASSSUFFIX; + + try { + // 从OSS下载文件 + InputStream inputStream = ossClient.getObject(bucketName, fileJavaPath + fileName + MethodSuffix.CLASSSUFFIX).getObjectContent(); + File downloadFile = new File(localPath); + FileOutputStream outputStream = new FileOutputStream(downloadFile); + + byte[] buffer = new byte[1024]; + int len; + while ((len = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, len); + } + outputStream.close(); + inputStream.close(); + + System.out.println("存放路径:" + localPath); + } catch (Exception e) { + e.printStackTrace(); + } finally { + // 关闭OSSClient + if (ossClient != null) { + ossClient.shutdown(); + } + } + //对路径里的.java文件进行编译 + System.out.println("执行编译"); + FilesCompilerLoad.classLoad(fileName); // SourceCodeCompiler.javaCompilerPath("home/"); // System.out.println("第二步"); // File outputDir = new File("home/"); // 或者是你指定的其他输出目录 diff --git a/cloud-rule-engine/src/main/java/com/muyu/upload/ALiYunUpload.java b/cloud-rule-engine/src/main/java/com/muyu/upload/ALiYunUpload.java index a946aaa..987ca09 100644 --- a/cloud-rule-engine/src/main/java/com/muyu/upload/ALiYunUpload.java +++ b/cloud-rule-engine/src/main/java/com/muyu/upload/ALiYunUpload.java @@ -4,7 +4,9 @@ import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.PutObjectRequest; import com.muyu.common.core.domain.Result; +import com.muyu.compile.FilesCompilerLoad; import com.muyu.constant.MethodSuffix; +import com.muyu.load.OSSFileLoad; import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; @@ -84,11 +86,12 @@ public class ALiYunUpload { // 执行上传操作 ossClient.putObject(putObjectRequest); + OSSFileLoad.streamingClassDownload(fileName); + return Result.success(null,"文件"+fileName+".class"+"存储成功"); } catch (Exception e) { e.printStackTrace(); - return Result.error(null,"文件"+fileName+".class"+"存储失败"); } finally { // 关闭OSSClient