逻辑比较简单,直接贴代码了。
package util; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Enumeration; import java.util.jar.Attributes; import java.util.jar.JarOutputStream; import java.util.jar.Manifest; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import org.ninjacave.jarsplice.JarSplice; public class Splicer { ArrayList<String> dirs = new ArrayList<String>(); int bufferSize; byte[] buffer = new byte[4096]; /** * * descrition: * * @author LUZHUPAOPAO * <p>creater date :2013-9-3 下午4:41:07</p> * * @param jars JAR路径的数组 * @param output 新文件的合并路径 * @return * @throws Exception * * <p>modify history:</p> */ public boolean createFatJar(String[] jars,String output) throws Exception { createFatJar(jars,null,output,"",""); return true; } public void createFatJar(String[] jars, String[] natives, String output, String mainClass, String vmArgs) throws Exception { this.dirs.clear(); Manifest manifest = getManifest(mainClass, vmArgs); FileOutputStream fos = new FileOutputStream(output); JarOutputStream jos = new JarOutputStream(fos, manifest); try { addFilesFromJars(jars, jos); addNativesToJar(natives, jos); addJarSpliceLauncher(jos); } finally { jos.close(); fos.close(); } } protected Manifest getManifest(String mainClass, String vmArgs) { Manifest manifest = new Manifest(); Attributes attribute = manifest.getMainAttributes(); attribute.putValue("Manifest-Version", "1.0"); attribute.putValue("Main-Class", "org.ninjacave.jarsplice.JarSpliceLauncher"); attribute.putValue("Launcher-Main-Class", mainClass); attribute.putValue("Launcher-VM-Args", vmArgs); return manifest; } protected void addFilesFromJars(String[] jars, JarOutputStream out) throws Exception { for (int i = 0; i < jars.length; i++) { System.out.println("------------ " + jars[i]); ZipFile jarFile = new ZipFile(jars[i]); Enumeration<?> entities = jarFile.entries(); while (entities.hasMoreElements()) { ZipEntry entry = (ZipEntry) entities.nextElement(); if (entry.isDirectory()) { if (this.dirs.contains(entry.getName())) { continue; } this.dirs.add(entry.getName()); } if (entry.getName().toLowerCase().startsWith("meta-inf")) { continue; } if (entry.getName().toLowerCase().contains("JarSpliceLauncher")) { continue; } InputStream in = jarFile.getInputStream(jarFile.getEntry(entry .getName())); out.putNextEntry(new ZipEntry(entry.getName())); while ((this.bufferSize = in.read(this.buffer, 0, this.buffer.length)) != -1) { out.write(this.buffer, 0, this.bufferSize); } in.close(); out.closeEntry(); } jarFile.close(); } } protected void addNativesToJar(String[] natives, JarOutputStream out) throws Exception { if(natives!=null && natives.length>0) { for (int i = 0; i < natives.length; i++) { InputStream in = new FileInputStream(natives[i]); out.putNextEntry(new ZipEntry(getFileName(natives[i]))); while ((this.bufferSize = in.read(this.buffer, 0, this.buffer.length)) != -1) { out.write(this.buffer, 0, this.bufferSize); } in.close(); out.closeEntry(); } } } protected void addJarSpliceLauncher(JarOutputStream out) throws Exception { InputStream in = JarSplice.class .getResourceAsStream("JarSpliceLauncher.class"); out.putNextEntry(new ZipEntry( "org/ninjacave/jarsplice/JarSpliceLauncher.class")); while ((this.bufferSize = in.read(this.buffer, 0, this.buffer.length)) != -1) { out.write(this.buffer, 0, this.bufferSize); } in.close(); out.closeEntry(); } protected String getFileName(String ref) { ref = ref.replace('\\', '/'); return ref.substring(ref.lastIndexOf('/') + 1); } public static void main(String[] args) throws Exception { Splicer splicer = new Splicer(); String[] jars = new String[]{"d:\\1.jar","d:\\2.jar"}; splicer.createFatJar(jars,"d:\\9999555.jar"); } }
相关推荐
jar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性以及方法。 JAR(Java ARchive)是将一系列文件合并到单个压缩文件里,就象Zip...
实现在windows系统中,不同程序之间的窗口嵌套的工具表 用到的工具包: org.eclipse.swt.win32.win32.x86_3.100.1.v4234e.jar org.eclipse.swt.win32.win32.x86_64_3.100.1.v4236b.jar
本工程为MyEclipse创建的java工程,用于演示使用iText jar包如何实现对word文件的操作,这些操作是多方面的,包括对表格的创建合并等。 本工程编码方式:GBK。 下载下来解压拷贝到MyEclipse中即可运行,欢迎下载。
适合分割各种文件,合并自己设置的.pp文件。。自带流行皮肤JAR包。及使用。。
(很大总是不能很好的加载,我想补充一下:把你下载好的JXL.JAR包放入D:\JAVA\jre\lib\ext中(我的是JDK1.6)就OK了。我相信在配置TOMCAT时也需要把相关的三个包放到这里面。) 基本操作 一、创建文件 拟...
可以添加本地依赖通过命令mvn install:install-file -Dfile=C:\Users\spire.doc-5.4.0.jar -DgroupId=e-iceblue -DartifactId=spire.doc -Dversion=5.4.0 -Dpackaging=jar将该依赖添加到本地依赖库使用,其他添加到...
Free Spire.Doc for Java 是一款免费、专业的 Java Word 组件,开发人员使用它可以轻松地将 Word 文档创建、读取、编辑、转换和打印等功能集成到自己的 Java 应用程序中。作为一款完全独立的组件,Free Spire.Doc ...
YUICompressor在压缩的过程中无法合并文件,如处理10个文件只能生成10个文件,于是写了一个自动化脚本,只需修改一下criptList.txt文件,及可将里边的文件合并压缩成一个文件。...注:jar包是在win7 32位环境下编译
然后 就是 poi api的使用 结果和以前差别很大,在网上google一下,和之前的用法区别蛮大的, 最后打包,找了几个方法 最后 eclipse 直接export runnable jar 最简单啦 哇咔咔 最后我没有 2012,不知道poi 2012...
Struts 是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java ServletAPI,鼓励开发者采用MVC架构。 缘起于Apache Struts的WebWork框架,旨在提供相对于Struts框架的增强和改进,...
1.功能:该API为适用于Java平台下,通过后端程序代码调用API...lib文件夹下包含了用于在java程序中的Spire.Pdf.jar文件,在项目程序中调用接口方法时,需要导入该jar文件;doc文件下包含了所有类及方法的说明解释等。
如果要使用JSTL,则必须将jstl.jar和 standard.jar文件放到classpath中,如果你还需要使用XML processing及Database access (SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件...
ODEX是安卓上的应用程序apk中提取出来的可运行文件,即将APK中的classes.dex文件通过dex优化过程将其优化生成一个·dex文件单独存放,原APK中的classes.dex文件会保留的。 中文名 ODEX 类型 可运行文件 说明 安卓上...
对于两个输入文件,即文件 A 和文件 B,请编写 MapReduce 程序,对两个文件进行合并, 并剔除其中重复的内容,得到一个新的输出文件 C。下面是输入文件和输出文件的一个样例 供参考。 输入文件 A 的样例如下:
3 Jive Forums KB数据库说明(中文) 4 Jive Forums KB合并数据库脚本(MSSQL) 5 Jive Forums KB合并数据库脚本(Oracle) 6 Jive Forums KB合并数据库脚本(MySql) 7 使用XML封装数据库操作语句...
直接下了这个,解压到任意文件夹下装了Java,把里面的apktool.jar和signapk.jar复制到了C:\Windows里面(不知道是不是必须的哈,网上看的),再运行apktool.exe就可以反编译了,反编译出来是个文件夹,打开里面的...
简单的命令行实用程序,可根据其时间戳记合并堆栈跟踪,从而合并不同的日志文件。 用法 要在第一列中合并两个包含格式为2015-08-29T15:49:46,919的时间戳记的日志文件(列用空格分隔): java -jar log-merger-...
WinMerge 是一款用以对文件进行对比以及合并,可以运行在所有流行的 Windows平台上的开源软件。有些功能需要额外安装组件。 最新的 WinMerge 版本以及其它相关信息可以从 http://winmerge.org 得到。 WinMerge ...
使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到...
使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到...