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包名称

  • 相关阅读:
    Get-CrmSetting返回Unable to connect to the remote server的解决办法
    Dynamics 365中的常用Associate和Disassociate消息汇总
    Dynamics 365 Customer Engagement V9 活动源功能报错的解决方法
    Dynamics Customer Engagement V9版本配置面向Internet的部署时候下一步按钮不可点击的解决办法
    Dynamics 365检查工作流、SDK插件步骤是否选中运行成功后自动删除系统作业记录
    注意,更改团队所属业务部门用Update消息无效!
    Dynamics 365的审核日志分区删除超时报错怎么办?
    Dynamics 365使用Execute Multiple Request删除系统作业实体记录
    Dynamics 365的系统作业实体记录增长太快怎么回事?
    Dynamics CRM日期字段查询使用时分秒的方法
  • 原文地址:https://www.cnblogs.com/tianhao/p/4221307.html
Copyright © 2011-2022 走看看