【备忘】Ant打包jar示例

来源:互联网 发布:肛门调教知乎 编辑:程序博客网 时间:2024/05/16 05:26
<?xml version="1.0" encoding="UTF-8"?><project name="ESBTestService" default="jar" basedir="."><property name="src" value="src"/><property name="dest" value="WebRoot/WEB-INF/classes"/><property name="lib.home" value="WebRoot/WEB-INF/lib"/><property name="build.home" value="WebRoot/WEB-INF"/><property name="jar.name" value="testService.jar"/><!-- setup classpath --><path id="project.class.path">  <fileset dir="${lib.home}">  <include name="*.jar"/>  </fileset></path><target name ="clear" description="Clear all old files"><delete dir="${dest}" /><delete file="${jar.name}" /></target><target name="init" description="Make dest directory"><mkdir dir="${dest}"/></target><target name="compile" depends="clear,init"description="Compile all classes from src to dest"><javac srcdir="${src}" destdir="${dest}" debug="on" fork="true"><compilerarg line=" -encoding UTF-8 "/><classpath refid="project.class.path"/></javac></target><target name="jar" depends="compile"description="Create jar and MANIFEST.MF"><!-- create a property containing all .jar files, prefix lib/, and seperated with a space --><pathconvert property="libs.project" pathsep=" "><mapper><chainedmapper><!-- remove absolute path --><flattenmapper /><!-- add lib/ prefix --><globmapper from="*" to="lib/*" /></chainedmapper></mapper><path><!-- lib.home contains all jar files, in several subdirectories --><fileset dir="${lib.home}"><include name="**/*.jar" /></fileset></path></pathconvert><!-- create the jar --><jar jarfile="${build.home}/${jar.name}"basedir="${build.home}/classes"><!-- define MANIFEST.MF --><manifest><attribute name="Built-By" value="${user.name}" /><attribute name="Main-Class"value="test.service.TestServiceStartMain" /><!-- <section name="common"><attribute name="Specification-Title"value="${component.name}" /><attribute name="Specification-Version"value="${component.version}" /><attribute name="Specification-Vendor"value="${component.vendor}" /><attribute name="Implementation-Title"value="${component.name}" /><attribute name="Implementation-Version"value="${component.version} ${TODAY}" /><attribute name="Implementation-Vendor"value="${component.vendor}" /></section> --><!-- finally, use the magically generated libs path --><attribute name="Class-Path" value="${libs.project}" /></manifest></jar></target></project>

在打包后,发现一个问题,程序在MyEclipse下可以正常运行,但是打包后却报了一个NoSuchMethodError的错误,太熟悉了,一分析,原来是我的activemq5.5包和cxf2.4包有重复的类,头疼啊。 MyEclipse中在Config build path里可以通过‘Order and Export’来控制jar的加载顺序,因而它们貌似可以和平相处(我的activemq5.5包在最底下,因为它是最晚加进来的);但是jar打包后就不是啦,它会默认按照字典序来排序,这一排,我的activemq5.5包就跑前面去了,因而冲突就来了。

于是,想到修改jar包里的manifest文件,可是打开一看,里面的Class-Path排列的整整齐齐,而且每次换行后还有一个空格(似乎有文章),于是照着它的样子将我的activemq包换到了最后(换完后不用保证和原来一样对的整整齐齐,只需保证末尾记得换行,行首记得空格就ok),像这样:(以 '换行+空格' split ???)

Manifest-Version: 1.0Ant-Version: Apache Ant 1.7.0Created-By: 14.2-b01 (Sun Microsystems Inc.)Built-By: AdministratorMain-Class: test.service.TestServiceStartMainClass-Path: lib/FastInfoset-1.2.9.jar lib/a ntlr-2.7.7.jar lib/aopalliance-1.0.jar lib/asm-3.3.jar lib/commons-co llections-3.2.1.jar lib/commons-lang-2.6.jar lib/commons-logging-1.1. 1.jar lib/cxf-2.4.2.jar lib/cxf-manifest.jar lib/cxf-xjc-boolean-2.4. 0.jar lib/cxf-xjc-bug671-2.4.0.jar lib/cxf-xjc-dv-2.4.0.jar lib/cxf-x jc-ts-2.4.0.jar lib/dom4j-1.6.1-osgi.jar lib/geronimo-activation_1.1_ spec-1.1.jar lib/geronimo-annotation_1.0_spec-1.1.1.jar lib/geronimo- javamail_1.4_spec-1.7.1.jar lib/geronimo-jaxws_2.2_spec-1.0.jar lib/g eronimo-jms_1.1_spec-1.1.1.jar lib/geronimo-servlet_3.0_spec-1.0.jar  lib/geronimo-stax-api_1.0_spec-1.0.1.jar lib/geronimo-ws-metadata_2.0 _spec-1.1.3.jar lib/isorelax-20030108.jar lib/jaxb-api-2.2.1.jar lib/ jaxb-impl-2.2.1.1.jar lib/jaxb-xjc-2.2.1.1.jar lib/jaxen-1.1.1-osgi.j ar lib/jettison-1.3.jar lib/jetty-continuation-7.4.5.v20110725.jar li b/jetty-http-7.4.5.v20110725.jar lib/jetty-io-7.4.5.v20110725.jar lib /jetty-security-7.4.5.v20110725.jar lib/jetty-server-7.4.5.v20110725. jar lib/jetty-util-7.4.5.v20110725.jar lib/joda-time-1.6.2.jar lib/jr a-1.0-alpha-4.jar lib/js-1.7R2.jar lib/jsr311-api-1.1.1.jar lib/msv-c ore-2010.2.jar lib/neethi-3.0.1.jar lib/opensaml-2.4.1.jar lib/openws -1.4.1.jar lib/relaxngDatatype-20020414.jar lib/saaj-api-1.3.jar lib/ saaj-impl-1.3.2.jar lib/serializer-2.7.1.jar lib/slf4j-api-1.6.1.jar  lib/slf4j-jdk14-1.6.1.jar lib/spring-aop-3.0.5.RELEASE.jar lib/spring -asm-3.0.5.RELEASE.jar lib/spring-beans-3.0.5.RELEASE.jar lib/spring- context-3.0.5.RELEASE.jar lib/spring-core-3.0.5.RELEASE.jar lib/sprin g-expression-3.0.5.RELEASE.jar lib/spring-jms-3.0.5.RELEASE.jar lib/s pring-tx-3.0.5.RELEASE.jar lib/spring-web-3.0.5.RELEASE.jar lib/stax2 -api-3.1.1.jar lib/velocity-1.7.jar lib/woodstox-core-asl-4.1.1.jar l ib/wsdl4j-1.6.2.jar lib/wss4j-1.6.2.jar lib/xalan-2.7.1.jar lib/xml-r esolver-1.2.jar lib/xmlbeans-2.4.0.jar lib/xmlschema-core-2.0.jar lib /xmlsec-1.4.5.jar lib/xmltooling-1.3.1.jar lib/xsdlib-2010.1.jar lib/activemq -all-5.5.0.jar