使用ant打第一个包

来源:互联网 发布:c语言软件工程师培训 编辑:程序博客网 时间:2024/04/30 15:11

 今天打算使用一下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。

 

    

   

 

 

原创粉丝点击