使用one-jar-ant-task快速使现有工程支持jar in jar

3 篇文章 0 订阅
2 篇文章 0 订阅

问题

上篇文章:使用one-jar-appgen快速生成jar文件嵌套的eclipse工程中提到的方法适合于以下几个情况:

 

  1. 新建立工程。
  2. 原有工程目录结构与工具提供的类似,既build.xml的改动较小。
  3. 你是一个“拥抱变化”的哥们。

在其它情况下可以你就没有动力使用这个工具了。

one-jar-ant-task

本文说的方法是one-jar提供的另一个方法,直接使用ant的自定义task实现。这个方法相对于使用one-jar-appgen的方法更为轻量级一些。非常适合在已有工程上的build.xml上直接修改几处就可以了。好了,言归正传。

 

Step by Step

step0. 准备

eclipse工程

ant(已配置环境变量)

one-jar-ant-task.jar下载http://one-jar.sourceforge.net/index.php?page=downloads&file=downloads

 

step1. 新建一个工程

简单的写几行代码实现对外部jar的调用。

 

step2. 准备一个ant的build.xml文件

使程序能够编译通过,这时候调用jar任务的话生成的jar是不包含外部的jar文件的。

 

step3. 解压one-jar-ant-task.jar包

如c:/one-jar-ant-task

 

step4. 修改build.xml

这里有2个地方,引用自定义task,这里使用的是import的方法将one-jar-ant-task.jar中的one-jar-ant-task.xml文件进行引入。

代码如下:

 

	<property name="one-jar.dist.dir" value="C:/Users/Wenyang/topcoder/tools/one-jar-ant-task-0.97" />
	<import file="${one-jar.dist.dir}/one-jar-ant-task.xml" optional="true" />

 

然后是添加one-jar task:

代码如下:

 

	<target name="one-jar" depends="jar" description="one-jar">
		<manifest file="${manifest-one-jar.mf}">
			<attribute name="Main-Class" value="com.simontuffs.onejar.Boot" />
			<attribute name="One-Jar-Main-Class" value="com.xx.xx.demo.Demo" />
		</manifest>
		<one-jar destfile="one.jar" manifest="${manifest-one-jar.mf}">
			<main>
				<!-- Construct main.jar from classes and source code -->
				<fileset dir="${build.class.product}" excludes="*test.class" />
			</main>
			<lib>
				<fileset file="${wytools.dir}" />
			</lib>
		</one-jar>

	</target>


 

这里有几个注意的地方:

关于manifest.mf文件中

  • main-class: 必须为com.simontuffs.onejar.Boot
  • one-jar-main-class:为你程序的启动类

关于one-jar task

  • <main> 属性中应该使用fileset的方式指到编译完的class的位置,千万不要使用已经生成的jar文件。因为,在one-jar中会将我们的代码再次打包到main.jar中,这样就形成了3层的jar,程序运行时会报找不到主类的错误。

step5. 构建工程,运行jar

运行jar

 

后记:

  最初了解到one-jar是在over-stack网站上看到的,调试这个工具花了1.5天的时间,就把遇到的问题记录下来。我个人还觉得使用one-jar-ant-task的方式更灵活一些吧。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值