zoukankan      html  css  js  c++  java
  • 利用ant的javac任务来编译java程序

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="javaTest" default="compile" basedir=".">
    <!-- 在此.代表当前目录  -->
    <target name="clean">
    <delete dir="build"/>
    </target>
    <target name="compile" depends="clean">
    <mkdir dir="build/classes"/>
    <javac srcdir="src" destdir="build/classes"/>
    </target>
    </project>
    <!--运行结果
     E:antstudy>ant compile
    Buildfile: E:antstudyuild.xml
    
    clean:
    
    compile:
        [mkdir] Created dir: E:antstudyuildclasses
        [javac] E:antstudyuild.xml:9: warning: 'includeantruntime' was not set, d
    efaulting to build.sysclasspath=last; set to false for repeatable builds
        [javac] Compiling 1 source file to E:antstudyuildclasses
    
    BUILD SUCCESSFUL
    Total time: 1 second -->
    

      

    先建一个文件夹 antstudy(project文件夹)

    再建一个src文件夹(作为源代码目录)

    里面放置java程序

    在antstudy目录下建一个build.xml文件如上

    javac 属性:

    debug:是否产生调试信息默认为 off

    <target name="compile" depends="clean">
    <mkdir dir="build/classes"/>
    <javac srcdir="src" destdir="build/classes" debug="on"/>
    <!-- srcdir 源目录(在这里为源代码目录)destdir目标目录 即编译完成后存放class文件的目录 -->
    </target>
    

      

    <target name="compile" depends="clean">
    <mkdir dir="build/classes"/>
    <javac destdir="build/classes" fork="true" memorymaximumsize="500M source="1.2" target="1.2">
    <!-- srcdir 源目录(在这里为源代码目录)destdir目标目录 即编译完成后存放class文件的目录 -->
    <src path="src"/>
    <src path="eventinfo"/>
    </javac>
    </target>
    

    src path 编译的源目录,可以通过这样编译在不同文件夹里的文件

    fork

    是否执行外部的javac

    如果没有制定fork属性默认为false    javac和ant命令将在同一个进程中执行 容易出现内存溢出 同时javac被分配的内存只有64MB,如果指定fork属性为true,javac命令将和ant不在同一个进程中执行,分配内存的大小将为memoryinitialsize(获得基本vm初始内存大小)、memorymaximumsize(最大内存大小)指定的大小。

    source:指定版本号使编译出的(文件)类兼容该版本

    一般jdk都向下兼容向上不兼容   source在这里指编译出向下兼容的版本的类
    如果用Eclipse,你可以在项目属性中编译选项里有设置生成兼容JDK1.4的类。但是如果你在Eclipse里自己写Ant脚本用<javac> 命令去编译java类,则生成的仍为JDK1.5的类(执行Ant脚本时与Eclipse设置的编译选项无关)。如何解决了,其实很简单,只要在<javac> ant 命令里加source参数。

    target:根据指定的vm版本生成class文件

    <target name="compile" depends="clean">
    <mkdir dir="build/classes"/>
    <javac srcdir="src" destdir="build/classes" debug="on" includes="package/**,package1/**" excludes="package2/**/**"/>
    <!-- srcdir 源目录(在这里为源代码目录)destdir目标目录 即编译完成后存放class文件的目录 -->
    </target>
    

    includes 必须包括的文件模式的列表,以逗号或空格分割,如果忽略将包括所有文件

    excludes 必须排除的文件模式的列表,以逗号或空格分割,如果忽略将不排除任何文件

    debug    debug属性设置为on时 ,才能在debug引用该jar工程的时候debug到该jar包中的代码

    <javac encoding="utf-8" destdir="../WebContent/WEB-INF/classes" fork="true" memorymaximumsize="500M" source="${source}" target="${target}>
                 <src path="../src"/>
                 <src path="../eventinfo"/>
                 <src path="../detectsetting"/>
                <classpath refid="ids7010-web-vcm.classpath"/>
     </javac><!--适合需要编译的文件不在同一个目录内-->
    

    classpath     设置Classpath的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序(.class文件)。

    在javac过程中会使用到jar包里的class文件 

    所以有的时候也需要在<javac></javac>标签内打上<classpath>标签指定需要使用的jar包名称

  • 相关阅读:
    PHP header的几种用法
    Elasticsearch 学习笔记
    elsearch 安装过程中遇到的错误解决方式
    python常用模块
    python 列表和字段的相关函数
    Nginx+Redis+Ehcache大型高并发高可用三层架构总结
    Docker技术底层架构剖析
    ELK日志分析平台环境部署 (yum安装)
    禁止root直接登陆linux系统
    浅谈Rsync+Inotify实时同步
  • 原文地址:https://www.cnblogs.com/tianhao/p/4221307.html
Copyright © 2011-2022 走看看