<?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.0
Ant-Version: Apache Ant 1.7.0
Created-By: 14.2-b01 (Sun Microsystems Inc.)
Built-By: Administrator
Main-Class: test.service.TestServiceStartMain
Class-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