当你拿到一个jar文件并且希望替换掉jar中的某一个class文件,你应该怎么做呢?
以test.jar为例,放到C:/test目录下面,dos窗口切换到这个目录,运行命令:jar xf test.jar,那么你的所有的文件多解压到当前目录
然后替换对应的文件
在重新打包: jar cvf test.jar . , 其中最后一个. 号表示将当前目录下的所有文件打包成test.jar.(记得把原来的test.jar先删除掉)
另外就是你的jar可能会有一个META-INF的目录,下面有一个manifest.mf文件,这个文件是配合jar工作的,当你的jar是可运行的,该文件记录你运行的一些参数:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_23-b05 (Sun Microsystems Inc.)
Main-Class: com.ssc.cm.report.writer.ReportWriter
Class-Path: lib/activation-1.1.jar lib/arialfont-1.0.jar lib/bcmail-jd
k14-1.38.jar lib/bcprov-jdk14-1.38.jar lib/bctsp-jdk14-1.38.jar lib/c
ommons-beanutils-1.8.3.jar lib/commons-collections-3.2.1.jar lib/comm
ons-digester-2.1.jar lib/commons-logging-1.1.1.jar lib/dom4j-1.6.1.ja
r lib/edtftpj-1.5.3.jar lib/f1j-11.0.jar lib/groovy-all-2.0.6.jar lib
/itext-4.2.0.jar lib/j2ssh-core-0.2.9.jar lib/jasperreports-4.5.1.1.j
ar lib/jasperreports-extensions-3.5.3.jar lib/jcommon-1.0.15.jar lib/
jfreechart-1.0.12.jar lib/jta-1.1.jar lib/jxl-2.6.12.jar lib/log4j-1.
2.17.jar lib/mail-1.4.1.jar lib/ojdbc14-10.2.0.2.jar lib/pdf-renderer
-1.0.5.jar lib/quartz-1.8.5.jar lib/slf4j-api-1.7.2.jar lib/slf4j-log
4j12-1.7.2.jar lib/soap-2.3.1.jar lib/spring-beans-3.2.0.RELEASE.jar
lib/spring-core-3.2.0.RELEASE.jar lib/xml-apis-1.0.b2.jar /usr/local/
ccms/security/jclass/pwm/PwMatrix.jar
这里设定了入口函数以及使用到的类库.
如果用上面的命令,会发现你的manifest.mf文件是:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
,会导致你的jar运行出错,所以需要使用:
jar cvfM test.jar manifest.mf . cvfM中的M表示设置manifest.mf,最后的.号含义同上.