/**

* 生成jar包

*/

private void createJAR(String sourcePath, String classPath, String outPath, String jarName) {

File classFile = new File(classPath);

BufferedInputStream in = null;

try {

if (!classFile.exists()) {

classFile.mkdirs();

}

File file = new File(sourcePath);

File[] listFiles = file.listFiles();

ArrayList list = new ArrayList<>();

for (File file2 : listFiles) {

list.add(file2.getPath());

}

JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();

int result = -1;

for (int i = 0; list.size() > 0 && i < list.size(); i++) {

result = javaCompiler.run(null, null, null, "-d", classPath, list.get(i));

}

// 如果结果为0,说明编译成功, 可以打包

if (result == 0) {

compress(classPath, outPath + jarName);

}

} catch (Exception e) {

e.printStackTrace();

logger.error("生成jar包时出现了异常:" + e);

}

}

public void compress(String dir, String jarName) throws Exception {

File folderObject = new File(dir);

if (folderObject.exists()) {

List fileList = getSubFiles(new File(dir));

// 压缩文件名

Manifest manifest = new Manifest();

manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");

FileOutputStream fos = new FileOutputStream(jarName);

JarOutputStream zos = new JarOutputStream(fos, manifest);

JarEntry ze = null;

byte[] buf = new byte[1024];

int readLen = 0;

for (int i = 0; i < fileList.size(); i++) {

File f = (File) fileList.get(i);

ze = new JarEntry(getAbsFileName(dir, f));

ze.setSize(f.length());

ze.setTime(f.lastModified());

zos.putNextEntry(ze);

InputStream is = new BufferedInputStream(new FileInputStream(f));

while ((readLen = is.read(buf, 0, 1024)) != -1) {

zos.write(buf, 0, readLen);

}

is.close();

}

zos.close();

} else {

throw new Exception("文件夹不存在!");

}

}

private List getSubFiles(File baseDir) {

List fileList = new ArrayList();

File[] tmp = baseDir.listFiles();

for (int i = 0; i < tmp.length; i++) {

if (tmp[i].isFile()) {

fileList.add(tmp[i]);

}

if (tmp[i].isDirectory()) {

fileList.addAll(getSubFiles(tmp[i]));

}

}

return fileList;

}

private String getAbsFileName(String baseDir, File realFileName) {

File real = realFileName;

File base = new File(baseDir);

String ret = real.getName();

while (true) {

real = real.getParentFile();

if (real == null)

break;

if (real.equals(base))

break;

else {

ret = real.getName() + "/" + ret;

}

}

return ret;

}

java文件生成jar包_编译Java文件并生成jar包相关推荐

  1. 编译java程序的主命令_编译Java程序的命令是:()

    两信令点相邻是指:() 在220V电源上并联两只电灯,其功率分别为100W和40W,求这两支灯的总电流? 定子绕棒出槽口的电场比较集中,需涂覆碳化硅涂层以使电场趋于均匀. 体现网络预约出租汽车驾驶员自 ...

  2. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  3. 模块的四种形式 模块的调用 循环导入问题 模块的搜索路径 py文件的两种用途 编译python文件 包...

    目录 模块的四种形式 什么是模块 模块的四种形式 自定义模块 第三方模块 内置模块 包 使用模块的好处 模块的调用 循环导入问题 模块的搜索路径 py文件的两种用途 编译python文件 包 什么是包 ...

  4. android+包+反编译,简单的Android之apk包反编译方法

    网上相关的文章一大堆了,我只是总结下自己的反编译方法和工具 工具下载地址: 下载上面的三个工具的压缩包 Apktool_v1.5.1_CHS_By_b-sf.rar dex2jar.zip jd-gu ...

  5. java -cp 引用多个包_javac编译单文件、多文件引入jar包、-cp解决无法加载主类问题...

    其中,可能的选项包括: -g                                                       生成所有调试信息 -g:none                ...

  6. java service包_利用 javaService 发布服务(jar包)

    jar在java中作为一种项目的发布形式比较普遍,往往为了容易管理更需要作为一种系统服务发布--起码服务器重启了不用人工去重新打开你所以往运行的jar文件. 这里简单的介绍下怎么将jar发布到winN ...

  7. JAVA导入Oracle包_将java的jar包导入oracle,通过oracle调用java方法

    最近项目上遇到一个问题,因为项目一些数据设计保密的问题,所以数据库的很多数据都是脱敏存储的;但是需求又需要去模糊查询,这就蛋疼了, 由于项目是用base64脱敏的;第一次想到了把条件进行脱敏之后去数据 ...

  8. java工程加包_向java工程添加jar包

    当你在向java类中导入某些包的时候(比如:import javax.servet.*)会报错,提示没有这个包.那是因为我们使用的jdk的JRE System Library库中没有包含servet_ ...

  9. java -jar 运行jar包_用java –jar 命令运行Jar包

    用java –jar 命令运行Jar包 摘要 这个技巧阐明了如何不直接处理清单文件而将一个不能运行jar包转换成一个可以执行的jar包.学会如何写一段转换jar包的程序,将你的jar包转换成你能使用j ...

  10. linux java jar打包_【Java】Java程序打包成jar包在Linux上运行

    当需要把在Windows上开发的Java程序用在Linux上运行时,就需要吧该Java程序打包成jar包上传到Linux上去运行. 1.Java程序用MyEclipse打包成可运行的jar包 (1)在 ...

最新文章

  1. 弱电工程网络视频监控系统联网方式及接地要求
  2. stdthread(6)并发lockGuard
  3. linux nginx mysql php 5.5._搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程
  4. C#关于自带滚动条控件的滚动条跳动问题
  5. 页面编码过滤器和配置
  6. maven安装配置换阿里源
  7. java调用打印机打印
  8. 中通hadoop去CDH的实践之路
  9. 守望先锋:射线命中位置,相距距离,根据射线命中位置和相距距离找到对应实体在数组中的值
  10. 猿创征文|2022年前端之路——我的前端开发好帮手
  11. CSS 3之菜单的横竖转换
  12. jquery选择器连续选择_jQuery选择器简介
  13. iTop4412---linux 3.0.15内核编译错误
  14. 时间戳服务器作用,使用时间戳给医院带来的好处
  15. 新型多功能、高性能量子点,可以用于医学成像、量子计算
  16. PyQT6的从零开始(三):在pyqt桌面程序简单内置网页浏览器
  17. c语言程序个人实验报告,C语言程序设计实验报告(5)
  18. 中兴回应被列入被执行人名单;摩拜否认裁员 30%;LG 支持韩国对高通罚款 9 亿美元 | 雷锋早报... 1
  19. 开放式激光振镜运动控制器(一):ZMC408SCAN接口与功能
  20. emeditor正则表达式_掌握EmEditor正则表达式语法,大大提升工作效率

热门文章

  1. 【比赛】CCL“中国法研杯”相似案例匹配评测竞赛 - TOP队伍攻略分享
  2. 【CCL 2019】参会小结与心得分享
  3. 介绍4个大神常用而你不常用的python函数
  4. 300小时人工智能学习视频课程,从数理基础到爬虫实战!
  5. 数据结构与算法python—14.排序之九种排序详解
  6. 利用python进行数据分析—9.数据规整:连接、联合与重塑
  7. 数据科学包7- pandas高级内容之分组运算
  8. Python Cheat Sheet 中文版
  9. 图论算法——无向图的邻接链表实现
  10. 深度学习花书- 4.3 基于梯度的优化方法