From 1fea3eea8bf676ac6cf35c6b98e42efdbc5b897e Mon Sep 17 00:00:00 2001 From: dengzedong <dengzedong@email> Date: 星期日, 29 九月 2024 11:50:08 +0800 Subject: [PATCH] 模型生成代码后备份dll和jar,用于测试运行模型 --- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/ModelServiceApplication.java | 7 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/MdkConstant.java | 8 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java | 198 +++++++++++++++++++--------- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MpkFileController.java | 18 +- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MdkDTO.java | 2 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/utils/GenUtils.java | 97 +------------ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MdkController.java | 60 ++++++-- 7 files changed, 219 insertions(+), 171 deletions(-) diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/ModelServiceApplication.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/ModelServiceApplication.java index a335d92..8376d57 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/ModelServiceApplication.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/ModelServiceApplication.java @@ -1,5 +1,6 @@ package com.iailab; +import iail.mdk.model.common.Environment; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -24,10 +25,12 @@ properties.load(in); String mdkInitPath = properties.getProperty("mdk-init-path"); System.out.println("mdkInitPath=" + mdkInitPath); - IAILMDK.initWithBean(mdkInitPath, false); + System.load(mdkInitPath + File.separator + "IAIL.MDK.Mid.Windows.dll"); + Environment env = new Environment(); + env.init(); } catch (Exception e) { e.printStackTrace(); - System.out.println("动态链接库IAILMDK初始化失败"); + System.out.println("动态链接库IAIL.MDK.Mid.Windows.dll初始化失败"); } } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/MdkConstant.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/MdkConstant.java index 45db33a..37c39da 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/MdkConstant.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/MdkConstant.java @@ -26,4 +26,12 @@ * libs */ String LIBS = "libs"; + /** + * dll + */ + String DLL = "dll"; + /** + * jar + */ + String JAR = "jar"; } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/utils/GenUtils.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/utils/GenUtils.java index e411574..b1a1611 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/utils/GenUtils.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/utils/GenUtils.java @@ -21,81 +21,6 @@ @Slf4j public class GenUtils { - public static List<String> getTemplates(){ - List<String> templates = new ArrayList<String>(); - templates.add("abstract.java.vm"); - templates.add("impl.java.vm"); - templates.add("cpp.vm"); - templates.add("Jni.cpp.vm"); - templates.add("h.vm"); - templates.add("Jni.h.vm"); - return templates; - } - /** - * 生成代码 - */ - public static void generatorCode(MpkFileDTO entity, ZipOutputStream zip){ - //设置velocity资源加载器 - Properties prop = new Properties(); - prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); - Velocity.init(prop); - - //封装模板数据 - Map<String, Object> map = new HashMap<>(); - map.put("pkgName",entity.getPkgName()); - map.put("modelMethods",entity.getModelMethods()); - map.put("pyName",entity.getPyName()); - map.put("pyModule",entity.getPyModule()); - - VelocityContext context = new VelocityContext(map); - - //获取模板列表 - List<String> templates = getTemplates(); - for(String template : templates){ - //渲染模板 - StringWriter sw = drawTemplate(template,context); - - try { - //添加到zip - zip.putNextEntry(new ZipEntry(getFileName(template, entity.getPyName(),entity.getPkgName(),entity.getPyModule()))); - IOUtils.write(sw.toString(), zip, "UTF-8"); - IOUtils.closeQuietly(sw); - zip.closeEntry(); - } catch (IOException e) { - log.error("渲染模板失败,模型名称:" + entity.getPyName(), e); - throw new RuntimeException("渲染模板失败,模型名称:" + entity.getPyName(), e); - } - } - } - - /** - * 获取文件名 - */ - public static String getFileName(String template, String moduleName, String pkgName, String pyModule) { - // java - if (template.equals("abstract.java.vm")) { - return pkgName.replace(".", File.separator) + File.separator + moduleName + ".java"; - } - if (template.equals("impl.java.vm")) { - return pkgName.replace(".", File.separator) + File.separator + MdkConstant.IMPL + File.separator + moduleName + "Impl.java"; - } - // c++ - if (template.equals("cpp.vm")) { - return pyModule.replace(".", File.separator) + File.separator + moduleName + ".cpp"; - } - if (template.equals("h.vm")) { - return pyModule.replace(".", File.separator) + File.separator + moduleName + ".h"; - } - // Jni c++ - if (template.equals("Jni.cpp.vm")) { - return pyModule.replace(".", File.separator) + File.separator + MdkConstant.JNI + File.separator + moduleName + "Jni.cpp"; - } - if (template.equals("Jni.h.vm")) { - return pyModule.replace(".", File.separator) + File.separator + MdkConstant.JNI + File.separator + moduleName + "Jni.h"; - } - return null; - } - /** * 渲染模板 **/ @@ -116,21 +41,25 @@ return writer; } - public static void drawTemplate(String template,Map<String, Object> map,File toFile) throws IOException { + public static void drawTemplate(String template,Map<String, Object> map,File toFile) { VelocityContext context = new VelocityContext(map); drawTemplate(template,context,toFile); } - public static void drawTemplate(String template,VelocityContext context,File toFile) throws IOException { - StringWriter writer = drawTemplate(template,context); + public static void drawTemplate(String template,VelocityContext context,File toFile) { + try { + StringWriter writer = drawTemplate(template,context); - FileUtil.mkParentDirs(toFile); + FileUtil.mkParentDirs(toFile); - if (!toFile.exists()) { - toFile.createNewFile(); + if (!toFile.exists()) { + toFile.createNewFile(); + } + + FileUtil.writeUtf8String(writer.toString(),toFile); + IOUtils.closeQuietly(writer); + } catch (IOException e) { + throw new RuntimeException("模板渲染异常"); } - - FileUtil.writeUtf8String(writer.toString(),toFile); - IOUtils.closeQuietly(writer); } } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MdkController.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MdkController.java index f9bfa10..0c77b58 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MdkController.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MdkController.java @@ -1,32 +1,25 @@ package com.iailab.module.model.mpk.controller.admin; -import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.converters.longconverter.LongStringConverter; -import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; -import com.iailab.framework.common.enums.CommonStatusEnum; import com.iailab.framework.common.exception.enums.GlobalErrorCodeConstants; import com.iailab.framework.common.pojo.CommonResult; -import com.iailab.framework.excel.core.handler.SelectSheetWriteHandler; -import com.iailab.framework.excel.core.util.ExcelUtils; +import com.iailab.module.model.mpk.common.MdkConstant; import com.iailab.module.model.mpk.common.utils.Readtxt; import com.iailab.module.model.mpk.dto.MdkDTO; -import com.iailab.module.system.enums.common.SexEnum; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Parameters; -import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; +import java.io.File; import java.lang.reflect.Method; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import java.util.*; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import static com.iailab.framework.common.pojo.CommonResult.error; import static com.iailab.framework.common.pojo.CommonResult.success; @@ -39,8 +32,30 @@ @RestController @RequestMapping("/model/mpk/api") public class MdkController { + @Value("${mpk.bak-file-path}") + private String mpkBakFilePath; + + @PostMapping("run") public CommonResult<String> run(@RequestBody MdkDTO dto) { + + try { + File jarFile = new File(mpkBakFilePath + File.separator + MdkConstant.JAR + File.separator + dto.getPyName() + ".jar"); + if (!jarFile.exists()) { + throw new RuntimeException("jar包不存在,请先生成代码。jarPath:" + jarFile.getAbsolutePath()); + } + File dllFile = new File(mpkBakFilePath + File.separator + MdkConstant.DLL + File.separator + dto.getPyName() + ".dll"); + if (!dllFile.exists()) { + throw new RuntimeException("dllw文件不存在,请先生成代码。dllPath:" + dllFile.getAbsolutePath()); + } + // 加载jar包 + loadJar(jarFile.getAbsolutePath()); + // 加载dll + System.load(dllFile.getAbsolutePath()); + } catch (Exception e) { + throw new RuntimeException("加载运行环境失败。"); + } + System.out.println("runTime=" + System.currentTimeMillis()); try { List<String> datas = dto.getDatas(); @@ -103,4 +118,19 @@ } return success(result); } + + private void loadJar(String jarPath) throws Exception { + File jarFile = new File(jarPath); + if (!jarFile.exists()) { + throw new Exception("jar沒有找到!"); + } else { + Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); + boolean accessible = method.isAccessible(); + method.setAccessible(true); + URLClassLoader classLoader = (URLClassLoader)ClassLoader.getSystemClassLoader(); + URL url = jarFile.toURI().toURL(); + method.invoke(classLoader, url); + method.setAccessible(accessible); + } + } } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MpkFileController.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MpkFileController.java index 9931ccc..180c168 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MpkFileController.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MpkFileController.java @@ -91,15 +91,19 @@ } @GetMapping("generat") - public void generat(String id, String remark,String zipFileName, HttpServletResponse response) throws IOException { - byte[] data = mpkFileService.generatorCode(id, remark,zipFileName); + public void generat(String id, String remark,String zipFileName, HttpServletResponse response) { + try { + byte[] data = mpkFileService.generatorCode(id, remark,zipFileName); - response.reset(); - response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(zipFileName, "UTF-8") + "\""); - response.addHeader("Content-Length", "" + data.length); - response.setContentType("application/octet-stream; charset=UTF-8"); + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(zipFileName, "UTF-8") + "\""); + response.addHeader("Content-Length", "" + data.length); + response.setContentType("application/octet-stream; charset=UTF-8"); - IOUtils.write(data, response.getOutputStream()); + IOUtils.write(data, response.getOutputStream()); + } catch (Exception e) { + throw new RuntimeException("代码生成异常"); + } } @GetMapping("packageModel") diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MdkDTO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MdkDTO.java index ce6b964..ad08abe 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MdkDTO.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MdkDTO.java @@ -15,6 +15,8 @@ public class MdkDTO implements Serializable { private static final long serialVersionUID = 1L; + private String pyName; + private String className; private String methodName; diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java index 99a1675..492056a 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java @@ -16,12 +16,16 @@ import com.iailab.module.model.mpk.common.MdkConstant; import com.iailab.module.model.mpk.common.utils.GenUtils; import com.iailab.module.model.mpk.dao.MpkFileDao; -import com.iailab.module.model.mpk.dto.*; -import com.iailab.module.model.mpk.entity.*; +import com.iailab.module.model.mpk.dto.GeneratorCodeHistoryDTO; +import com.iailab.module.model.mpk.dto.ModelMethodDTO; +import com.iailab.module.model.mpk.dto.MpkFileDTO; +import com.iailab.module.model.mpk.dto.ProjectPackageHistoryDTO; +import com.iailab.module.model.mpk.entity.GeneratorCodeHistoryEntity; +import com.iailab.module.model.mpk.entity.MpkFileEntity; +import com.iailab.module.model.mpk.entity.ProjectPackageHistoryModelEntity; import com.iailab.module.model.mpk.service.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; @@ -32,10 +36,8 @@ import org.springframework.web.multipart.MultipartFile; import java.io.*; -import java.nio.file.Files; import java.util.*; import java.util.stream.Collectors; -import java.util.zip.ZipOutputStream; /** * @author PanZhibao @@ -61,8 +63,11 @@ @Autowired private ConfigApi configApi; - @Value("${mpk.bakFilePath}") + @Value("${mpk.bak-file-path}") private String mpkBakFilePath; + + @Value("${mpk.bak-resources}") + private String mpkResources; /*@PostConstruct public void init() { @@ -167,46 +172,106 @@ @Override public byte[] generatorCode(String id, String remark, String zipFileName) { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ZipOutputStream zip = new ZipOutputStream(outputStream); - MpkFileDTO entity = baseDao.get(id); //生成代码 - GenUtils.generatorCode(entity, zip); - IOUtils.closeQuietly(zip); + //设置velocity资源加载器 + Properties prop = new Properties(); + prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + Velocity.init(prop); - File file = null; - OutputStream fileOutputStream = null; - //文件备份 - try { - String dirPath = mpkBakFilePath; - File dir = new File(dirPath); - if (!dir.exists()) { - dir.mkdirs(); - } - String filePath = dirPath + File.separator + zipFileName; - file = new File(filePath); - file.createNewFile(); - fileOutputStream = Files.newOutputStream(file.toPath()); - IOUtils.write(outputStream.toByteArray(), fileOutputStream); - } catch (IOException e) { - log.error("生成代码文件备份失败," + entity.getPyName(), e); - throw new RuntimeException(e); - } finally { - IOUtils.closeQuietly(fileOutputStream); - } + //封装模板数据 + Map<String, Object> map = new HashMap<>(); + map.put("pkgName",entity.getPkgName()); + map.put("modelMethods",entity.getModelMethods()); + map.put("pyName",entity.getPyName()); + map.put("pyModule",entity.getPyModule()); + + VelocityContext dataContext = new VelocityContext(map); + + //临时文件夹 + File dirPath = new File("D:/DLUT/tmp/"); + dirPath.deleteOnExit(); + dirPath.mkdirs(); + + List<String> javaFilePaths = new ArrayList<>(); + List<String> cppFilePaths = new ArrayList<>(); + + //生成java文件 + File javaFile = new File(dirPath.getAbsolutePath() + File.separator + "IAILMDK" + File.separator + entity.getPkgName().replace(".", File.separator) + File.separator + entity.getPyName() + ".java"); + GenUtils.drawTemplate("abstract.java.vm", dataContext, javaFile); + javaFilePaths.add(javaFile.getAbsolutePath()); + + //生成Impl.java文件 + File implJavaFile = new File(dirPath.getAbsolutePath() + File.separator + "IAILMDK" + File.separator + entity.getPkgName().replace(".", File.separator) + File.separator + MdkConstant.IMPL + File.separator + entity.getPyName() + "Impl.java"); + GenUtils.drawTemplate("impl.java.vm", dataContext, implJavaFile); + javaFilePaths.add(implJavaFile.getAbsolutePath()); + + //生成.cpp文件 + File cppFile = new File(dirPath.getAbsolutePath() + File.separator + MdkConstant.C + File.separator + entity.getPyName() + ".cpp"); + GenUtils.drawTemplate("cpp.vm", dataContext, cppFile); + cppFilePaths.add(cppFile.getAbsolutePath()); + + //生成Jni.cpp文件 + File jniCppFile = new File(dirPath.getAbsolutePath() + File.separator + MdkConstant.C + File.separator + entity.getPyName() + "Jni.cpp"); + GenUtils.drawTemplate("Jni.cpp.vm", dataContext, jniCppFile); + cppFilePaths.add(jniCppFile.getAbsolutePath()); + + //生成.h文件 + File hFile = new File(dirPath.getAbsolutePath() + File.separator + MdkConstant.C + File.separator + entity.getPyName() + ".h"); + GenUtils.drawTemplate("h.vm", dataContext, hFile); + + //生成Jni.h文件 + File jniHFile = new File(dirPath.getAbsolutePath() + File.separator + MdkConstant.C + File.separator + entity.getPyName() + "Jni.h"); + GenUtils.drawTemplate("Jni.h.vm", dataContext, jniHFile); + + // 资源文件 + FileUtil.copy(mpkResources + File.separator + "libs", dirPath.getAbsolutePath(), true); + + //生成dll文件 + String dllSavePath = dirPath.getAbsolutePath() + File.separator + MdkConstant.LIBS + File.separator + "IAIL.MDK.Mid.Jni.dll"; + createDllFile(dirPath.getAbsolutePath(),cppFilePaths,dllSavePath); + //备份dll文件,用于后续运行 + String dllBakPath = mpkBakFilePath + File.separator + MdkConstant.DLL + File.separator + entity.getPyName() + ".dll"; + FileUtil.mkParentDirs(dllBakPath); + FileUtil.copy(dllSavePath, dllBakPath, true); + + //utils + env java文件 + File utilsJavaFile = new File(dirPath.getAbsolutePath() + File.separator + "IAILMDK" + File.separator + "iail" + File.separator + "mdk" + File.separator + "model" + File.separator + "utils" + File.separator + "AlgsUtils.java"); + FileUtil.mkParentDirs(utilsJavaFile); + FileUtil.copy(mpkResources + File.separator +"IAILMDK/utils/AlgsUtils.java", utilsJavaFile.getAbsolutePath(), true); + javaFilePaths.add(utilsJavaFile.getAbsolutePath()); + File envJavaFile = new File(dirPath.getAbsolutePath() + File.separator + "IAILMDK" + File.separator + "iail" + File.separator + "mdk" + File.separator + "model" + File.separator + "common" + File.separator + "Environment.java"); + FileUtil.mkParentDirs(envJavaFile); + FileUtil.copy(mpkResources + File.separator +"IAILMDK/common/Environment.java", envJavaFile.getAbsolutePath(), true); + javaFilePaths.add(envJavaFile.getAbsolutePath()); + // 生成class文件 + createClassFile(javaFilePaths); + // 删除java源文件 + deleteJavaFile(javaFilePaths); + // 打jar包 + String jarSavePath = pkgJar(dirPath.getAbsolutePath()); + //备份jar文件,用于后续运行 + String jarBakPath = mpkBakFilePath + File.separator + MdkConstant.JAR + File.separator + entity.getPyName() + ".jar"; + FileUtil.mkParentDirs(dllBakPath); + FileUtil.copy(jarSavePath, jarBakPath, true); + // 打zip包 + String zipPath = mpkBakFilePath + File.separator + zipFileName; + ZipUtil.zip(dirPath.getAbsolutePath(), zipPath); + byte[] bytes = FileUtil.readBytes(zipPath); //代码生成历史记录 GeneratorCodeHistoryEntity historyEntity = new GeneratorCodeHistoryEntity(); historyEntity.setId(UUID.randomUUID().toString()); historyEntity.setMdkId(id); - historyEntity.setFileName(file.getName()); - historyEntity.setFilePath(file.getAbsolutePath()); + historyEntity.setFileName(zipFileName); + historyEntity.setFilePath(zipPath); historyEntity.setRemark(remark); historyEntity.setCreateTime(new Date()); generatorCodeHistoryService.insert(historyEntity); - return outputStream.toByteArray(); + // 删除临时文件 + FileUtils.deleteDirectory(dirPath); + return bytes; } @Override @@ -215,15 +280,14 @@ List<MpkFileDTO> entities = baseDao.selectByIds(ids); //模板数据 - Map<String, Object> map = new HashMap<>(); - map.put("entities", entities); - VelocityContext context = new VelocityContext(map); +// Map<String, Object> map = new HashMap<>(); +// map.put("entities", entities); +// VelocityContext context = new VelocityContext(map); //临时文件夹 - File dirPath = new File("C:/DLUT/tmp/"); - if (!dirPath.exists()) { - dirPath.mkdirs(); - } + File dirPath = new File("D:/DLUT/tmp/"); + dirPath.deleteOnExit(); + dirPath.mkdirs(); //设置velocity资源加载器 Properties prop = new Properties(); @@ -283,8 +347,8 @@ FileUtil.copy(entity.getFilePath(), pyFilePath, true); } - // - FileUtil.copy("bak/libs", dirPath.getAbsolutePath(), true); + // 资源文件 + FileUtil.copy(mpkResources + File.separator + "libs", dirPath.getAbsolutePath(), true); //生成dll文件 String dllSavePath = dirPath.getAbsolutePath() + File.separator + MdkConstant.LIBS + File.separator + "IAIL.MDK.Mid.Jni.dll"; @@ -293,11 +357,11 @@ //utils + env java文件 File utilsJavaFile = new File(dirPath.getAbsolutePath() + File.separator + "IAILMDK" + File.separator + "iail" + File.separator + "mdk" + File.separator + "model" + File.separator + "utils" + File.separator + "AlgsUtils.java"); FileUtil.mkParentDirs(utilsJavaFile); - FileUtil.copy("bak/IAILMDK/utils/AlgsUtils.java", utilsJavaFile.getAbsolutePath(), true); + FileUtil.copy(mpkResources + File.separator +"IAILMDK/utils/AlgsUtils.java", utilsJavaFile.getAbsolutePath(), true); javaFilePaths.add(utilsJavaFile.getAbsolutePath()); File envJavaFile = new File(dirPath.getAbsolutePath() + File.separator + "IAILMDK" + File.separator + "iail" + File.separator + "mdk" + File.separator + "model" + File.separator + "common" + File.separator + "Environment.java"); FileUtil.mkParentDirs(envJavaFile); - FileUtil.copy("bak/IAILMDK/common/Environment.java", envJavaFile.getAbsolutePath(), true); + FileUtil.copy(mpkResources + File.separator +"IAILMDK/common/Environment.java", envJavaFile.getAbsolutePath(), true); javaFilePaths.add(envJavaFile.getAbsolutePath()); // 生成class文件 createClassFile(javaFilePaths); @@ -348,22 +412,26 @@ return bytes; } - private void createDllFile(String dirPath, List<String> cppFilePaths, String dllSavePath) throws InterruptedException, IOException { - String paths = cppFilePaths.stream().collect(Collectors.joining(" ")); - String command = "cl /LD " + paths + " /EHsc /o " + dllSavePath + " /link " + "IAIL.MDK.Mid.Windows.lib"; - log.info("执行cmd命令生成dll:" + command); - ProcessBuilder builder = new ProcessBuilder("cmd", "/c", command); - builder.directory(new File(dirPath + File.separator + MdkConstant.LIBS)); - Process process = builder.start(); - // 获取命令输出结果 - InputStream inputStream = process.getInputStream(); - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "GBK")); // 设置编码为GBK - String line; - while ((line = reader.readLine()) != null) { - log.info(line); + private void createDllFile(String dirPath, List<String> cppFilePaths, String dllSavePath) { + try { + String paths = cppFilePaths.stream().collect(Collectors.joining(" ")); + String command = "cl /LD " + paths + " /EHsc /o " + dllSavePath + " /link " + "IAIL.MDK.Mid.Windows.lib"; + log.info("执行cmd命令生成dll:" + command); + ProcessBuilder builder = new ProcessBuilder("cmd", "/c", command); + builder.directory(new File(dirPath + File.separator + MdkConstant.LIBS)); + Process process = builder.start(); + // 获取命令输出结果 + InputStream inputStream = process.getInputStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "GBK")); // 设置编码为GBK + String line; + while ((line = reader.readLine()) != null) { + log.info(line); + } + // 等待命令执行完成 + process.waitFor(); + } catch (Exception e) { + throw new RuntimeException("执行cmd命令生成dll异常"); } - // 等待命令执行完成 - process.waitFor(); } @Override @@ -373,7 +441,9 @@ dir.mkdirs(); } String fileName = file.getOriginalFilename(); - File saveFile = new File(dir.getAbsolutePath() + File.separator + fileName); + String fileSuffix = fileName.substring(fileName.lastIndexOf(".")); + File saveFile = new File(dir.getAbsolutePath() + File.separator + UUID.randomUUID() + fileSuffix); + saveFile.createNewFile(); // 保存 file.transferTo(saveFile); @@ -406,14 +476,16 @@ GenUtils.drawTemplate("log.txt.vm", data, logFile); } - private void pkgJar(String dirPath) throws InterruptedException { + private String pkgJar(String dirPath) throws InterruptedException { + String jarSavePath = dirPath + File.separator + MdkConstant.LIBS + File.separator + "IAILMDK.jar"; StringBuilder sb = new StringBuilder(); sb.append("jar -cvf"); - sb.append(" ").append(dirPath).append(File.separator).append(MdkConstant.LIBS).append(File.separator).append("IAILMDK.jar"); + sb.append(" ").append(jarSavePath); sb.append(" -C ").append(dirPath).append(File.separator).append("IAILMDK").append(File.separator).append(" ."); log.info("执行cmd命令打jar包:" + sb); Process process = RuntimeUtil.exec(sb.toString()); process.waitFor(); + return jarSavePath; } private void deleteJavaFile(List<String> javaFilePaths) { -- Gitblit v1.9.3