/**

* 生成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. C# System.Guid.NewGuid() 格式化
  2. 图像增强之拉普拉斯锐化---高斯一阶导二阶导数
  3. linux系统盘满了,mysql启动不了
  4. [转]VC无负担实现XP风格界面
  5. SQL和PL/SQL的性能优化之四---联结与子查询
  6. python psycopg2使用_Python中用psycopg2模块操作PostgreSQL方法
  7. 阿里云发布首个流式存储与播放解决方案
  8. androidentity什么用_Android multipartentity的用法
  9. mt6765和骁龙665哪个好_骁龙665+5000毫安大电池不到千元,手机厂商还要怎么玩?...
  10. 学习C++项目—— 计算机网络编程基础 和 学习多线程,多进程基础
  11. 关于 WPF 在主窗口中用多线程打开的子窗口关闭后进程还存在,这个问的题的解决方法。...
  12. 运维必读:避免故障、拒绝背锅的六大原则!
  13. cf 189B - Counting Rhombi
  14. java因子分析_spss因子分析
  15. php导出excel出现乱码,php导出excel出现乱码怎么办
  16. word转PDF,导航窗格输出目录
  17. python合并相同内容单元格_快速合并单元格相同项的内容
  18. (半)自动批量添加QQ好友
  19. http库三剑客:httpx
  20. 台式计算机启动时 每次按f1,电脑开机时总是提示要按F1?云骑士告诉你如何解决...

热门文章

  1. 【论文阅读】EMNLP 2018 基于自适应的多轮解码机制的神经机器翻译模型
  2. 笔记_pytorch
  3. 【分类汇总】110 天以来的题解分类汇总
  4. 【每日算法Day 83】邻居小孩一年级就会的乘法表,你会吗?
  5. 统计学习方法读书笔记16-SVM支持向量机
  6. 干货丨Kotlin在Spring Boot中的应用
  7. 专访肖仰华:知识图谱迅速“升温”下的学习方法与就业选择
  8. 每周荐书:Web扫描、HTML 5、Python(评论送书)
  9. 二十一天学通VC++之创建工作者线程
  10. 深度学习:径向基网络(RBF)