今天打算使用一下ant,按照网上找来的教程,先下载了ant1.71版,然后
配置了环境变量 ANT_HOME D:/apache-ant-1.7.1
在Path里加上 D:/apache-ant-1.7.1/bin
开始打包。。
先创建了helloworld的类:
然后创建build.xml配置文件:
这里解释一下, 先创建一个src文件夹,把helloworld.java放进去,ant开始打包时从最上面的一个
target开始执行,target可以认为是一个任务,每个target执行前都会先执行它所depends的target。
<target name="init">
<mkdir dir="${dest}"/>
</target>
这段是创建classes文件夹
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
</target>
这段的意思是把src里面的helloworld.java编译并把生成的class文件放到上一步创建的classes文件夹里。
<target name="build" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
这段的意思是把classes里面的class文件打成jar包,名字叫${hello_jar}变量指定的hello1.jar
<target name="run" depends="build">
<java classname="test.ant.HelloWorld" classpath="${hello_jar}"/>
</target>
这段的意思是运行,真正把jar包打出来。
<target name="clean">
<delete dir="${dest}" />
<delete file="${hello_jar}" />
</target>
这段的意思是删除classes文件夹和hello1.jar,classes下的文件也被删除了。这一段只是测试删除功能,不是必须的。
<target name="rerun" depends="clean,run">
<ant target="clean" />
<ant target="run" />
</target>
这段的意思是调用clean和run两个target,演示了如何target的调用,它会将clean和run重新执行一遍。
即使不需要最后两段也可以把jar包打出来了。
但是当我在命令行下 用 java -jar hello1.jar 去执行刚打出来的jar时,报了个错:
Failed to load Main-Class manifest attribute from hello1.jar
上网查了一下,原因是在生成的jar中MANIFEST.MF文件没有指定main方法所在的类,不知道为什么
会出这个错,我将jar包解压,在MANIFEST.MF加上Main-Class: test.ant.HelloWorld并回车,
(网上特别提到必须增加这个回车,否则还会报同个错,我试了一下,确实如此)
然后重新打成hello2.jar.zip包,打包完成后重命名为hello2.jar。
重新在命令行下执行 java -jar hello2.jar 成功
中间曾试过重新打为rar包,但执行命令后提示无效包,看来jar包是zip格式的。
至此ant打包完成,但是不知道为什么用ant打出来的包不能用,应该是中间哪个步骤有问题,不然打出来
的包都没用,还有谁用ant。