文档章节

利用java代码实现java源文件的编译和打包为jar文件

Zero零_度
 Zero零_度
发布于 2015/10/29 16:54
字数 367
阅读 142
收藏 9

一、编译部分


[java] view plaincopy在CODE上查看代码片派生到我的代码片

  1.    

  2.   

  3. public void complier() throws IOException {  

  4.   

  5.     System.out.println("*** --> 开始编译java源代码...");  

  6.   

  7.     File javaclassDir = new File(javaClassPath);  

  8.     if (!javaclassDir.exists()) {  

  9.         javaclassDir.mkdirs();  

  10.     }  

  11.   

  12.     List<String> javaSourceList = new ArrayList<String>();  

  13.     getFileList(new File(javaSourcePath), javaSourceList);  

  14.   

  15.     JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();  

  16.     int result = -1;  

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

  18.         result = javaCompiler.run(null, null, null, "-d", javaClassPath, javaSourceList.get(i));  

  19.         System.out.println(result == 0 ? "*** 编译成功 : " + javaSourceList.get(i) : "### 编译失败 : " + javaSourceList.get(i));  

  20.     }  

  21.     System.out.println("*** --> java源代码编译完成。");  

  22. }  



[java] view plaincopy在CODE上查看代码片派生到我的代码片

  1.     

  2. private void getFileList(File file, List<String> fileList) throws IOException {  

  3.   

  4.         if (file.isDirectory()) {  

  5.             File[] files = file.listFiles();  

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

  7.                 if (files[i].isDirectory()) {  

  8.                     getFileList(files[i], fileList);  

  9.                 } else {  

  10.                     fileList.add(files[i].getPath());  

  11.                 }  

  12.             }  

  13.         }  

  14.     }  

  15.      



二、打包部分

[java] view plaincopy在CODE上查看代码片派生到我的代码片

  1. public void generateJar() throws FileNotFoundException, IOException {  

  2.   

  3.     System.out.println("*** --> 开始生成jar包...");  

  4.     String targetDirPath = targetPath.substring(0, targetPath.lastIndexOf("/"));  

  5.     File targetDir = new File(targetDirPath);  

  6.     if (!targetDir.exists()) {  

  7.         targetDir.mkdirs();  

  8.     }  

  9.   

  10.     Manifest manifest = new Manifest();  

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

  12.   

  13.     JarOutputStream target = new JarOutputStream(new FileOutputStream(targetPath), manifest);  

  14.     writeClassFile(new File(javaClassPath), target);  

  15.     target.close();  

  16.     System.out.println("*** --> jar包生成完毕。");  

  17. }  

  18.    


[java] view plaincopy在CODE上查看代码片派生到我的代码片

  1. private void writeClassFile(File source, JarOutputStream target) throws IOException {  

  2.     BufferedInputStream in = null;  

  3.     try {  

  4.         if (source.isDirectory()) {  

  5.             String name = source.getPath().replace("\\", "/");  

  6.             if (!name.isEmpty()) {  

  7.                 if (!name.endsWith("/")) {  

  8.                     name += "/";  

  9.                 }  

  10.                 name = name.substring(javaClassPath.length());  

  11.                 JarEntry entry = new JarEntry(name);  

  12.                 entry.setTime(source.lastModified());  

  13.                 target.putNextEntry(entry);  

  14.                 target.closeEntry();  

  15.             }  

  16.             for (File nestedFile : source.listFiles())  

  17.                 writeClassFile(nestedFile, target);  

  18.             return;  

  19.         }  

  20.   

  21.         String middleName = source.getPath().replace("\\", "/").substring(javaClassPath.length());  

  22.         JarEntry entry = new JarEntry(middleName);  

  23.         entry.setTime(source.lastModified());  

  24.         target.putNextEntry(entry);  

  25.         in = new BufferedInputStream(new FileInputStream(source));  

  26.   

  27.         byte[] buffer = new byte[1024];  

  28.         while (true) {  

  29.             int count = in.read(buffer);  

  30.             if (count == -1)  

  31.                 break;  

  32.             target.write(buffer, 0, count);  

  33.         }  

  34.         target.closeEntry();  

  35.     } finally {  

  36.         if (in != null)  

  37.             in.close();  

  38.     }  

  39. }  

  40.       


三、使用

[java] view plaincopy在CODE上查看代码片派生到我的代码片

  1. public static void main(String[] args) throws IOException, InterruptedException {  

  2.   

  3.     String currentDir = "c:/myProject";  

  4.     String javaSourcePath = currentDir + "/src/main/java/";  

  5.     String javaClassPath = currentDir + "/classes";  

  6.     String targetPath = currentDir + "/target/MyProject.jar";  

  7.   

  8.     CompilerAndJarTools cl = new CompilerAndJarTools(javaSourcePath, javaClassPath, targetPath);  

  9.     cl.complier();  

  10.     cl.generateJar();  

  11. }  



本文转载自:http://blog.csdn.net/teamlet/article/details/41949791

Zero零_度
粉丝 69
博文 1267
码字总数 263854
作品 0
程序员
私信 提问
加载中

评论(1)

单行道
单行道
学习
JAVA基础知识之编译、运行、打包

一:java环境设置 在环境变量中设置以下三个变量: JAVAHOME=C:j2sdk1.4.1 //可以改为相应的目录 CLASSPATH=%JAVAHOME%libtools.jar;%JAVAHOME%libdt.jar PATH=%JAVAHOME%bin;%PATH% 然后在命...

luminji
2015/06/03
0
0
Java 实现Git拉包 maven打包项目

开发过程中遇到这样的需求,Java拉取指定代码库指定分支的代码java代码,然后有maven打包,将打包好的jar上传到文件服务器。 解决思路分三步: 1.从Git仓库下载代码文件 2.用maven打包下载好...

MrPei
2018/08/14
185
0
转载分享:Android APP二次打包操作步骤介绍

看到好的技术教程就想转载一下,不喜勿喷!谢谢配合,仅供菜鸟学习研究,不要做坏事哦\(^o^)/~ 关于Android APP 二次打包现象已经屡见不鲜,为何“打包党”就吃准了Android平台,二次打包的操...

科技创造
2015/08/26
1K
2
翻译--Gradle之Java工程入门

我们已经看到Gradle是一个通用构建工具,它可以完成相当多的任务,只要你能在脚本里定义好。如果你没写好脚本,它就啥也干不成。 大部分Java项目都是这样的流程:编译源文件,单元测试,打成...

davelet
2014/01/12
0
0
Ant 中 *Log4j.properties 找不到文件的问题

在用 Ant 进行构建,部署,运行过程中,发现一小问题,就是在运行时总是提示“系统找不到指定的文件”。害得我花了不少时间,最后终于弄清楚了问题的原因。以下的错误代码(贴出来好让后面的...

xiaofer2008
2011/01/14
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
10分钟前
1
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
3
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
12
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
13
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部