【备忘】Ant打包jar示例

<?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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值