上一节我们阅读到了org.jivesoftware.openfire.starter.ServerStarter文件中的第90行,这节继续。
第90行调用unpackArchives(libDir, true);方法。
通过阅读该方法的英文注释大概意思是:转换文件夹中的一些包文件为一个标准的jar文件,在转换jar文件的同时每个被转的包文件就会被删除,如果包文件不存在,那么就什么都不做。
-
过滤文件
带着这句话我们进行阅读。该方法传入了2个参数,第一个是一个lib文件夹,第二个参数是个boolean值true。
File [] packedFiles = libDir.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".pack"); } }); if (packedFiles == null) { // Do nothing since no .pack files were found return; }
以上代码是unpackArchives方法中的146到155行的代码。
上面的第一句话我们大家应该很熟悉,没错,这句话我也经常用,但是我经常用不带参数的方法也就是一般这样用,
File [] packedFiles = libDir.listFiles();
这样是获取到一个文件夹下的所有的文件。
而带参数的根据字面意思大概是过滤文件名称的意思,就是过滤一定规则的文件,而不是显示所有的文件,
过滤用
FilenameFilter
这个接口,一般我们用接口都是通过继承的方法来使用,但是我们现在通过new的方式来使用,其实这种用法还是蛮多的,比如很多注册事件== 很多地方都大量运用了该方法。
但是new接口的时候我们会发现我们就要实现里面所有的方法,少一个方法都不可以。因为FilenameFilter
接口只有一个方法accept
所以我们在new的同时就会实现该方法,我们通过该方法直接过滤以某种后缀名的文件就可以了现在我们要列出.pack类型的文件所以我们应该写
return
name.endsWith(
".pack"
);
就可以获取到了。很方便吧。
通过以上代码我们学习一个知识点,那就是获取某个文件夹下的某种格式的文件列表应该用FilenameFilter
来实现,实现方法是一下代码
File [] packedFiles = libDir.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".pack"); } });
如果没有获取到.pack类型的文件那么什么都不做,直接返回。
-
具体实现把.pack的文件转换为jar文件
上面我们获取到了.pack的文件数据,然后开始遍历该数组,把每个.pack文件转为jar文件。
关键代码如下
InputStream in = new BufferedInputStream(new FileInputStream(packedFile)); JarOutputStream out = new JarOutputStream(new BufferedOutputStream( new FileOutputStream(new File(libDir, jarName)))); Pack200.Unpacker unpacker = Pack200.newUnpacker(); // Print something so the user knows something is happening. if (printStatus) { System.out.print("."); } // Call the unpacker unpacker.unpack(in, out); in.close(); out.close(); packedFile.delete(); unpacked = true;
以上的packedFile
是遍历每个.pack的文件。就这样把.pack文件转为了jar文件。
相关推荐
Openfire源码 缺失的jar包- jetty-jmx-8.0.0.M2.jar 。还有其他jar包请查看
openfire3.10.1源码编译缺少的jar包: jetty-websocket-8.1.17.v20150415 jnsapi mina-core-1.1.7-sources.jar mina-filter-compression-1.1.7-sources.jar mina-filter-ssl-1.1.7-sources.jar mina-filter-ssl.jar ...
openfire 二次开发缺少包coherence-work.jar,coherence.jar,tangosol.jar
coherence.jar,coherence-work.jar,tangosol.jar
Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2
openfire源码配置Eclipse需要的3个jar包: coherence.jar、coherence-work.jar、tangosol.jar。 【源码里不自带的jar包】
openfire开发配置需要的3个jar包coherence.jar、coherence-work.jar、tangosol.jar
openfire webchat源码部署相关jar(jasper.jar、jasper-compiler-jdt.jar、jasper-el.jar、jasper-jdt.jar 等)
openfire的linux安装版本,下载以后将文件上传到linux某文件夹下面,然后敲“tar –xzvf openfire-3.6.2-1.i386.tar.gz mv openfire /opt”命令完成安装。完成安装以后再敲“/etc/init.d/openfire /etc/init.d/...
包含openfire3.10.2所需要的所有jar包;mina-filter-ssl-1.1.7-sources.jar slf4j-api-1.5.8-sources.jar slf4j-log4j12-1.5.8-sources.jar 等等
openfire 源码搭建缺失的四个jar包coherence.jar、coherence-work.jar、tangosol.jar、jackson-all-1.9.0.jar
OpenFire源代码配置的时候会有几个目录报错,是由于缺少3个jar包:coherence.jar、coherence-work.jar、tangosol.jar
openfire源码缺少的bouncycastle.jar包
openfire源码搭建所需要的5个包。pull-parser-2.1.10.jar、apache-ant-1.8.2.jar、coherence.jar、coherence-work.jar、tangosol.jar
dom4j.jar v1.6.1 和对应源码src.zip,用于 xml、openfire、xmpp 等 xml 解析,效率高、稳定
ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 转发
openfire是基于XMPP协议的即时通讯框架,spark是pc客户端应用,类似qq客户端。smack提供了与XMPP服务通信的开发库。
openfire搭建本地开发环境所需jar。 包含:coherence.jar、coherence-work.jar、tangosol.jar、bouncycastle.jar
Linux环境下的openfire安装包,能够结合spark客户端进行即时通信
openfire4.0.2缺少的jar包,需要的小伙伴快来下载吧!