`
liuwei_blog
  • 浏览: 94288 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用ant生成可执行的jar包

    博客分类:
  • ant
阅读更多

1. a.下载ant: http://ant.apache.org/bindownload.cgi

    b.安装ant: 解压ant,路径越简单越好(这是好习惯),设置环境变量ANT_HOME,PATH里添加;%ANT_HOME%\bin

    c.打开cmd,键入ant回车,如果出现提示信息
"Buildfile: build.xml does not exist!
Build failed"
就说明安装成功了


2.  java工程目录结构:
|-src-|-  //.java源文件
|-bin-|- // .class文件
|-lib-|-  //第三方jar包
build.xml    // ant 配置文件

 

3。由于ant没有提供填写jar包里Class-Path的任务,所以需要编写自定义任务,扩展Ant ,Java代码如下:

package personal.lw.util; 

import java.io.File; 

import org.apache.tools.ant.BuildException; 
import org.apache.tools.ant.Task; 

public class AntUtil extends Task { 

    private String lib; 

    private String classPath = ""; 

    private String fileType = ".jar"; 

    // ant task 
    public void execute() throws BuildException { 
        try { 
            this.classPath(dir(lib)); 
            this.getOwningTarget().getProject().setProperty("class-path", 
                    classPath); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 

    } 

    // 根据路径获得目录 
    private File dir(String path) throws Exception { 
        return dir(path, false); 
    } 

    private File dir(String path, boolean bCreate) throws Exception { 
        File dir = new File(path); 
        if (dir.exists()) { 
            if (!dir.isDirectory()) { 
                throw new Exception(dir.getName() + "is not a directory !"); 
            } 
        } else { 
            if (bCreate) { // 新建 
                if (!dir.mkdirs()) { 
                    throw new Exception("can not create the directory \"" 
                            + dir.getName() + "\"!"); 
                } 
            } 
        } 
        return dir; 
    } 

    // 生成classpath字符串 
    private void classPath(File dir) { 
        classPath(dir, lib); 
        classPath = classPath.trim(); 
    } 

    private void classPath(File dir, String parentPath) { 
        // 处理目录 
        if (dir.isDirectory()) { 
            File[] subs = dir.listFiles(); 
            for (int i = 0, len = subs.length; i < len; i++) { 
                if (subs[i].isFile()) { // 文件 
                    String name = subs[i].getName(); 
                    // 处理.jar文件 
                    if (name.length() > fileType.length() 
                            && fileType.equals(name.substring(name.length() 
                                    - fileType.length(), name.length()))) { 
                        classPath += parentPath + path(subs[i]) + " "; 
                        continue; 
                    } 
                } 
                if (subs[i].isDirectory()) { // 文件夹 
                    classPath(subs[i], parentPath + path(subs[i])); 
                } 
            } 

        } else { 
            // 不是目录 
            System.out.println(dir.getPath() + dir.getName() 
                    + "is not a directory !"); 
        } 
    } 

    // 文件路径 
    private String path(File f) { 
        return "/" + f.getName(); 
    } 

    // 字符串 -- > 路径 
    @SuppressWarnings("unused") 
    private String path(String path) { 
        path = path.replaceAll("\\\\", "/"); 
        if (!"/".equals(path.substring(0, 1))) { 
            path = "/" + path; 
        } 
        return path; 
    } 

    public void setLib(String lib) { 
        this.lib = lib; 
    } 

}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liuwei_blog/archive/2008/12/20/3567292.aspx

 编译后打成jar包,拷贝到%ANT_HOME%\lib目录下,注意编译的时候需要导入ant的jar包,如果用ant打包就不需要导ant的jar包了,生成普通jar包的ant配置文件如下:

<?xml version="1.0" encoding="GB2312" standalone="no"?> 
<project basedir="." default="usage" name="hibernate"> <!-- ====此处需要修改====工程名 --> 
<!-- 工程名,没有被引用,可以不改 --> 
      <property name="project-name" value="hibernate"/> <!-- ====此处需要修改====.jar文件名 --> 
      <property name="lib" value="lib"/> <!-- lib--> 
      <property name="src" value="src"/> <!-- src--> 
      <property name="tar" value="bin"/> <!-- bin --> 
      <property name="jar-file-name" value="${project-name}.jar"/> 
      <property name="main-class" value="demo.book.controler.Test"/> <!-- ====此处需要修改====main-class--> 

      <path id="Third-Part Lib"> 
            <fileset dir="${lib}"> 
                  <include name="**/*.jar"/> 
            </fileset> 
      </path> 

      <target description="Build file usage info (default task)" name="usage"> 
            <echo message=" "/> 
            <echo message="  ${project-name} "/> 
            <echo message="-------------------------------------------------------"/> 
            <echo message="  Available Targets:"/> 
            <echo message="  compile    - Compiles the source code"/> 
            <echo message="  clean      - Delete class files and .jar file"/> 
            <echo message="  jar        - Generate an .jar for source code"/> 
            <echo message="  run        - Execute Main-Class"/> 
            <echo message="-------------------------------------------------------"/> 
      </target> 

      <target name="prepare"> 
            <mkdir dir="${tar}"/> 
      </target> 

      <target name="clean"> 
            <delete dir="${tar}"/> 
            <delete file="${jar-file-name}"/> 
      </target> 
     
    <target name="copy-res"> 
        <copy todir="${tar}"> 
            <fileset dir="${src}"> 
                <exclude name="**/*.java"/> 
            </fileset> 
        </copy> 
    </target> 

      <target depends="clean,prepare,copy-res" name="compile"> 
            <javac debug="true" deprecation="true" destdir="${tar}" failonerror="true" srcdir="${src}"> 
                  <classpath refid="Third-Part Lib"/>  
            </javac> 
      </target> 
      <!-- 
       <target name="run" depends="jar"> 
            <java jar="${jar-file-name}" fork="true" maxmemory="256m"/> 
      </target> 

      --> 
        <!-- 注意:classpath="${tar}" 一定要加上,否则会报"java.lang.NoClassDefFoundError"的错误!--> 
        <target depends="compile" name="run"> 
            <java classname="${main-class}" classpath="${tar}" fork="true" maxmemory="256m"> 
                  <classpath refid="Third-Part Lib"/>  
            </java> 
      </target> 

      <target depends="compile" name="jar"> 
            <jar basedir="${tar}" destfile="${jar-file-name}"> 
                  <manifest> 
                        <attribute name="Main-Class" value="${main-class}"/> 
                        <attribute name="Class-Path" value=""/> 
                  </manifest> 
            </jar> 
      </target> 
</project> 
 

4.生成可执行jar包的ant配置文件如下:

<?xml version="1.0" encoding="GB2312" standalone="no"?> 
<project basedir="." default="usage" name="hibernate"> <!-- ====此处需要修改====工程名 --> 
<!-- 工程名,没有被引用,可以不改 --> 
      <property name="project-name" value="hibernate"/> <!-- ====此处需要修改====.jar文件名 --> 
      <property name="lib" value="lib"/> <!-- lib--> 
      <property name="src" value="src"/> <!-- src--> 
      <property name="tar" value="bin"/> <!-- bin --> 
      <property name="jar-file-name" value="${project-name}.jar"/> 
      <property name="main-class" value="demo.book.controler.Test"/> <!-- ====此处需要修改====main-class--> 

      <path id="Third-Part Lib"> 
            <fileset dir="${lib}"> 
                  <include name="**/*.jar"/> 
            </fileset> 
      </path> 

      <target description="Build file usage info (default task)" name="usage"> 
            <echo message=" "/> 
            <echo message="  ${project-name} "/> 
            <echo message="-------------------------------------------------------"/> 
            <echo message="  Available Targets:"/> 
            <echo message="  compile    - Compiles the source code"/> 
            <echo message="  clean      - Delete class files and .jar file"/> 
            <echo message="  jar        - Generate an .jar for source code"/> 
            <echo message="  run        - Execute Main-Class"/> 
            <echo message="-------------------------------------------------------"/> 
      </target> 

      <target name="prepare"> 
            <mkdir dir="${tar}"/> 
      </target> 

      <target name="clean"> 
            <delete dir="${tar}"/> 
            <delete file="${jar-file-name}"/> 
      </target> 
     
    <target name="copy-res"> 
        <copy todir="${tar}"> 
            <fileset dir="${src}"> 
                <exclude name="**/*.java"/> 
            </fileset> 
        </copy> 
    </target> 

      <target depends="clean,prepare,copy-res" name="compile"> 
            <javac debug="true" deprecation="true" destdir="${tar}" failonerror="true" srcdir="${src}"> 
                  <classpath refid="Third-Part Lib"/>  
            </javac> 
      </target> 
      <!-- 
       <target name="run" depends="jar"> 
            <java jar="${jar-file-name}" fork="true" maxmemory="256m"/> 
      </target> 

      --> 
        <!-- 注意:classpath="${tar}" 一定要加上,否则会报"java.lang.NoClassDefFoundError"的错误!--> 
        <target depends="compile" name="run"> 
            <java classname="${main-class}" classpath="${tar}" fork="true" maxmemory="256m"> 
                  <classpath refid="Third-Part Lib"/>  
            </java> 
      </target> 
      <!-- 自定义任务,创建并赋值变量class-path --> 
      <taskdef name="jarcp" classname="personal.lw.util.AntUtil"/> 
      <target name="class-path"> 
        <jarcp lib="${lib}"/> 
      </target> 

      <target depends="compile,class-path" name="jar"> 
            <jar basedir="${tar}" destfile="${jar-file-name}"> 
                  <manifest> 
                        <attribute name="Main-Class" value="${main-class}"/> 
                        <attribute name="Class-Path" value="${class-path}"/> 
                  </manifest> 
            </jar> 
      </target> 
</project> 
 

只比上一个多了一个自定义任务。

 

(完) ^_^

分享到:
评论

相关推荐

    ant.jar,ant-junit.jar,ant-launcher.jar,ant-trax.jar

    通过ant-junit.jar,开发者可以在Ant构建脚本中轻松地执行单元测试,收集测试结果,甚至实现测试报告的生成。这对于持续集成和确保代码质量至关重要。 3. ant-launcher.jar:这个组件是Ant启动器,它负责解析并执行...

    关于使用ant制作可执行jar

    标题中的“关于使用ant制作可执行jar”是一个与Java开发相关的主题,主要涉及的是如何使用Apache Ant工具构建一个能够直接运行的JAR(Java Archive)文件。Apache Ant是一个基于XML的构建工具,它允许开发者定义构建...

    使用ANT所需jar包

    本资源包包含了运行ANT所必需的JAR文件,确保用户能够顺利执行ANT脚本进行项目管理。下面我们将深入探讨ANT以及其中涉及到的关键知识点。 首先,Apache Ant是一个XML驱动的构建工具,它的配置文件通常被称为build....

    ant脚本编译jar

    `&lt;manifest&gt;`部分用于添加`JAR`的清单文件,`Main-Class`属性指定了程序的主类,使得`JAR`可以作为可执行文件运行。 在实际项目中,可能还需要其他任务,比如清理(`clean`)构建输出,或者进行单元测试(`junit`)...

    ant打jar包时, 怎么把所依赖的jar包与从源码中编译过来class文件合并成最终的一个jar?

    在Java开发过程中,将源代码编译为class文件并打包...通过这种方式,你可以轻松地管理项目依赖,并创建一个独立的可执行jar,便于分发和部署。同时,这也适用于那些不希望使用更现代的构建工具如Maven或Gradle的项目。

    用ANT将java程序打成jar包

    在Java开发过程中,将代码打包成可执行的JAR(Java Archive)文件是常见的操作,这使得代码可以方便地分发、部署和运行。ANT是一个强大的构建工具,它使用XML来定义构建过程,包括编译、测试、打包等任务。本篇文章...

    ant-contrib.jar

    正确理解和使用Ant Contrib,能够使开发过程更加高效,构建流程更加可控,对于提升团队开发效率具有显著作用。因此,熟悉并掌握Ant Contrib的使用,对于任何Java开发人员来说都是一个重要的技能。

    ant-1.6.5.jar

    描述中的“使用apache ant jar包进行zip打包操作”可能是指使用Ant来创建ZIP格式的归档文件,尽管`jar`任务通常用于生成JAR文件,但通过特定配置,也可以处理ZIP格式。 关于描述中提到的问题,“为什么资源分不能选...

    emma_ant.jar,emma.jar合包

    标题中的"emma_ant.jar,emma.jar合包"指的是将Emma工具的两个主要组件——`emma.jar`和`emma_ant.jar`合并在一起的压缩文件。Emma是一个广泛使用的Java代码覆盖率工具,它提供了对Java应用程序单元测试的覆盖率分析...

    ant-antlr.jar.zip

    《Ant与ANTLR在Java开发中的应用及jar.zip包解析》 在Java开发中,我们经常会遇到各种工具和库,它们以不同的形式存在,如jar文件。"ant-antlr.jar.zip"是一个包含Ant和ANTLR相关资源的压缩包,主要用于Java项目的...

    ant-1.7.1.jar.zip

    了解并熟练掌握Ant的使用,对于任何Java开发者来说都是必不可少的技能,因为它可以帮助你构建高效、可复用的构建流程,提高开发效率。而通过对"build.xml"的深入理解和定制,你还可以实现更复杂的构建逻辑,满足项目...

    生成JAR包及包的运行.doc

    - 使用Ant,可以编写XML配置文件(build.xml),定义构建任务,包括创建JAR包和设置运行环境。 8. **双击运行JAR**: - 对于Windows用户,双击JAR文件运行需确保系统正确配置了Java环境变量,且JAR包内部MANIFEST...

    ant导出jar包例子

    在Java开发过程中,构建工具是不可或缺的一部分,...这个例子展示了如何使用Ant从源代码生成JAR包,包括创建目录、编译Java源代码和打包成JAR文件。了解并熟练掌握Ant,能够极大地提高开发效率,简化项目的维护工作。

    Ant 打可运行的jar

    运行Ant命令(例如`ant create-jar`),Ant会根据`build.xml`中的配置编译源代码并生成可运行的JAR文件`TestAntRunJar.jar`。 运行JAR文件,你可以使用以下命令: ```bash java -jar build/jar/TestAntRunJar.jar ...

    根据wsdl 用ant生成jar和客服端java代码

    在本案例中,我们将探讨如何利用Apache Ant工具和Axis库,根据WSDL文件自动生成Java客户端代码和JAR包。 Apache Ant是一个Java库和命令行工具,其任务是驱动构建过程。它允许开发者通过XML文件(通常称为build.xml...

    ant-1.6.1.jar.zip

    "ant-1.6.1.jar.zip"这个压缩包中包含的核心文件就是"ant-1.6.1.jar",这是Ant 1.6.1版本的可执行JAR文件,用于在Java环境中执行构建任务。开发者可以通过运行这个JAR文件,结合build.xml配置文件,实现项目的自动化...

    ant-deb.jar.zip

    例如,ant-deb.jar文件本身就是一个示例,它包含了Ant-deb.jar工具的可执行文件和许可证文件(ant.license.txt)。开发者可以通过解压这个zip文件,然后在Ant构建脚本中引用ant-deb.jar,来体验和学习如何使用这个...

    ant jar包

    6. **依赖管理**:如果项目有外部依赖,你需要将它们打包进一个可执行的JAR或创建一个包含所有依赖的fat JAR。使用`&lt;zipgroupfileset&gt;`可以将多个JAR合并到一个JAR中。 7. **执行Ant任务**:最后,通过运行`ant jar...

    【Ant】Ant实例(1)一个Java文件依赖于某jar包,需要打包部署

    本文将探讨如何使用Ant来处理一个简单的场景:一个Java文件(JettySample.java)依赖于某个jar包(例如webserver.jar),并将其打包成可部署的格式。 1. 安装与配置Ant 在开始之前,确保已经在本地安装了Ant,并且...

    使用jdk自带的jar工具打jar包

    它支持MANIFEST.MF文件,该文件包含了关于JAR的基本信息,如主类、版本等,是构建可执行JAR的关键。 二、创建JAR包的步骤 1. **配置MANIFEST.MF** 在创建JAR包之前,通常需要一个名为MANIFEST.MF的文件,指明JAR...

Global site tag (gtag.js) - Google Analytics