java文件生成jar包_编译Java文件并生成jar包
/**
* 生成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包相关推荐
- 编译java程序的主命令_编译Java程序的命令是:()
两信令点相邻是指:() 在220V电源上并联两只电灯,其功率分别为100W和40W,求这两支灯的总电流? 定子绕棒出槽口的电场比较集中,需涂覆碳化硅涂层以使电场趋于均匀. 体现网络预约出租汽车驾驶员自 ...
- 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目
王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...
- 模块的四种形式 模块的调用 循环导入问题 模块的搜索路径 py文件的两种用途 编译python文件 包...
目录 模块的四种形式 什么是模块 模块的四种形式 自定义模块 第三方模块 内置模块 包 使用模块的好处 模块的调用 循环导入问题 模块的搜索路径 py文件的两种用途 编译python文件 包 什么是包 ...
- android+包+反编译,简单的Android之apk包反编译方法
网上相关的文章一大堆了,我只是总结下自己的反编译方法和工具 工具下载地址: 下载上面的三个工具的压缩包 Apktool_v1.5.1_CHS_By_b-sf.rar dex2jar.zip jd-gu ...
- java -cp 引用多个包_javac编译单文件、多文件引入jar包、-cp解决无法加载主类问题...
其中,可能的选项包括: -g 生成所有调试信息 -g:none ...
- java service包_利用 javaService 发布服务(jar包)
jar在java中作为一种项目的发布形式比较普遍,往往为了容易管理更需要作为一种系统服务发布--起码服务器重启了不用人工去重新打开你所以往运行的jar文件. 这里简单的介绍下怎么将jar发布到winN ...
- JAVA导入Oracle包_将java的jar包导入oracle,通过oracle调用java方法
最近项目上遇到一个问题,因为项目一些数据设计保密的问题,所以数据库的很多数据都是脱敏存储的;但是需求又需要去模糊查询,这就蛋疼了, 由于项目是用base64脱敏的;第一次想到了把条件进行脱敏之后去数据 ...
- java工程加包_向java工程添加jar包
当你在向java类中导入某些包的时候(比如:import javax.servet.*)会报错,提示没有这个包.那是因为我们使用的jdk的JRE System Library库中没有包含servet_ ...
- java -jar 运行jar包_用java –jar 命令运行Jar包
用java –jar 命令运行Jar包 摘要 这个技巧阐明了如何不直接处理清单文件而将一个不能运行jar包转换成一个可以执行的jar包.学会如何写一段转换jar包的程序,将你的jar包转换成你能使用j ...
- linux java jar打包_【Java】Java程序打包成jar包在Linux上运行
当需要把在Windows上开发的Java程序用在Linux上运行时,就需要吧该Java程序打包成jar包上传到Linux上去运行. 1.Java程序用MyEclipse打包成可运行的jar包 (1)在 ...
最新文章
- C# System.Guid.NewGuid() 格式化
- 图像增强之拉普拉斯锐化---高斯一阶导二阶导数
- linux系统盘满了,mysql启动不了
- [转]VC无负担实现XP风格界面
- SQL和PL/SQL的性能优化之四---联结与子查询
- python psycopg2使用_Python中用psycopg2模块操作PostgreSQL方法
- 阿里云发布首个流式存储与播放解决方案
- androidentity什么用_Android multipartentity的用法
- mt6765和骁龙665哪个好_骁龙665+5000毫安大电池不到千元,手机厂商还要怎么玩?...
- 学习C++项目—— 计算机网络编程基础 和 学习多线程,多进程基础
- 关于 WPF 在主窗口中用多线程打开的子窗口关闭后进程还存在,这个问的题的解决方法。...
- 运维必读:避免故障、拒绝背锅的六大原则!
- cf 189B - Counting Rhombi
- java因子分析_spss因子分析
- php导出excel出现乱码,php导出excel出现乱码怎么办
- word转PDF,导航窗格输出目录
- python合并相同内容单元格_快速合并单元格相同项的内容
- (半)自动批量添加QQ好友
- http库三剑客:httpx
- 台式计算机启动时 每次按f1,电脑开机时总是提示要按F1?云骑士告诉你如何解决...