Ant自动化构建项目

简介: 1 普通java项目<?xml version="1.0" encoding="UTF-8"?><project default="ftp">    <property name="src.dir" location="src"></property>    <property name="test.src.dir" locat

1 普通java项目



<?xml version="1.0" encoding="UTF-8"?>
<project default="ftp">
    <property name="src.dir" location="src"></property>
    <property name="test.src.dir" location="test"></property>
    <property name="lib.dir" location="lib"></property>
    <property file="build.properties"></property>
    
    <property name="build.dir" location="build"></property>
    <property name="build.classes" location="${build.dir}/classes"></property>
    <property name="build.test.dir" location="${build.dir}/test"></property>
    <property name="build.test.classes" location="${build.test.dir}/classes"></property>
    <property name="build.test.report" location="${build.test.dir}/report"></property>
    <property name="build.jar.dir" location="${build.dir}/dist"></property>
    <property name="build.zip.dir" location="${build.dir}/zip"></property>
    <property name="build.doc.dir" location="${build.dir}/doc"></property>
    <property name="build.src" location="${build.dir}/src"></property>
    <property name="metadata.dir" location="metadata"/>
    
    <path id="compile-classpath">
        <fileset dir="${lib.dir}" includes="*.jar"></fileset>
    </path>
    
    <path id="compile-test-classpath">
        <path refid="compile-classpath"></path>
        <pathelement location="${build.classes}"/>
    </path>
    
    <path id="run-test-classpath">
        <path refid="compile-test-classpath"/>
        <pathelement location="${build.test.classes}"/>
    </path>
    
    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>
    
    <target name="init" depends="clean,metadata">
        <mkdir dir="${build.dir}"/>
        <mkdir dir="${build.classes}"/>
        <mkdir dir="${build.test.dir}"/>
        <mkdir dir="${build.test.classes}"/>
        <mkdir dir="${build.test.report}"/>
        <mkdir dir="${build.jar.dir}"/>
        <mkdir dir="${build.zip.dir}"/>
        <mkdir dir="${build.doc.dir}"/>
        <mkdir dir="${build.src}"/>
        <mkdir dir="${metadata.dir}"/>
    </target>
    
    <target name="compile" depends="init">
        <javac destdir="${build.classes}" srcdir="${src.dir}" 
            classpathref="compile-classpath" 
               includeantruntime="true" failonerror="true"></javac>
        <copy todir="${build.classes}">
            <fileset dir="${src.dir}" includes="**/*.*" excludes="**/*.java"></fileset>
        </copy>
    </target>
    
    <target name="compile-test" depends="compile">
        <javac destdir="${build.test.classes}" srcdir="${test.src.dir}"
               includeantruntime="true" failonerror="true" 
               classpathref="compile-test-classpath"></javac>
    </target>
    
    <target name="run-test" depends="compile-test">
        <junit fork="true" haltonfailure="false" failureproperty="junit.fail">
            <classpath refid="run-test-classpath"></classpath>
            <formatter type="brief" usefile="false"/>
            <formatter type="xml"/>
            <batchtest todir="${build.test.report}">
                <fileset dir="${build.test.classes}" includes="${run.test.class}"></fileset>
            </batchtest>
        </junit>
        <junitreport todir="${build.test.report}">
            <fileset dir="${build.test.report}" includes="TEST-*.xml"></fileset>
            <report format="frames" todir="${build.test.report}/html"/>
        </junitreport>
        <fail if="${junit.fail}" message="单元测试失败,具体情况请查询${build.test.report}"/>
    </target>
    
    <target name="doc" depends="run-test">
        <javadoc sourcepath="${src.dir}" use="true" packagenames="cn.*" 
               charset="UTF-8" encoding="UTF-8" docencoding="UTF-8"
               destdir="${build.doc.dir}">
            <classpath refid="compile-classpath"></classpath>
        </javadoc>
    </target>
    
    <target name="jar" depends="doc">
        <tstamp>
            <format property="now" pattern="yyyy=MM-dd HH:mm:ss"/>
        </tstamp>
        <jar destfile="${build.jar.dir}/${project.jar.name}" 
                basedir="${build.classes}" duplicate="preserve">
            <manifest>
                <attribute name="Build-By" value="${user.name}"/>
                <attribute name="Build-time" value="${now}"/>
            </manifest>
        </jar>        
    </target>
    
    <target name="copy-src" depends="jar">
        <copy todir="${build.src}">
            <fileset dir="${src.dir}" includes="**/*.*"></fileset>
        </copy>
    </target>
    
    
    <target name="metadata">
        <mkdir dir="${metadata.dir}"/>
        <buildnumber/>
        <propertyfile file="${metadata.dir}/build.propterties">
            <entry key="Build-time" type="date" value="now" pattern="yyyy-MM-dd HH:mm:ss"/>
            <entry key="build-number" type="int" value="${build.number}"/>
        </propertyfile>
    </target>
    
    <target name="zip" depends="copy-src">
        <zip destfile="${build.zip.dir}/${project.zip.name}" duplicate="preserve">
            <zipfileset file="${build.jar.dir}/${project.jar.name}" prefix="${project.prefix}"/>
            <zipfileset dir="${build.src}" includes="**/*.*" prefix="${project.prefix}/src"></zipfileset>
            <zipfileset dir="${build.doc.dir}" includes="**/*.*" prefix="${project.prefix}/doc/api"></zipfileset>
            <zipfileset dir="${build.test.dir}" includes="**/*.*" 
                    excludes="report/*.*" prefix="${project.prefix}/test"></zipfileset>
            <zipfileset dir="." includes="build.xml,build.properties" prefix="${project.prefix}"></zipfileset>
        </zip>
    </target>
    
    <presetdef name="upload">
        <ftp userid="${ftp.username}" password="${ftp.password}" 
             server="${ftp.server}" remotedir="${ftp.dir}"></ftp>
    </presetdef>
    
    <target name="ftp" depends="zip">
        <upload action="mkdir"/>
        <upload action="put">
            <fileset dir="${build.zip.dir}" includes="${project.zip.name}"></fileset>
            </upload>
    </target>
    
</project>



build.properties

ftp.username = kh
ftp.password = 123
ftp.server = localhost
ftp.dir = user_manager
project.version = SNAPSHOT-0.1
project.prefix = usermanager-${project.version}
project.jar.name = ${project.prefix}.jar
project.zip.name = ${project.prefix}.zip
run.test.class = **/Test*.class


2 web项目

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <property name="src.dir" location="src"></property>
    <property name="build.dir" location="build"></property>
    <property name="build.classes" location="${build.dir}/classes"></property>
    <property name="build.war" location="${build.dir}/war"></property>
    
    <property name="web.name" value="hello"></property>
    <property name="web.root" value="WebContent"></property>
    <property name="web.WEB-INF" location="${web.root}/WEB-INF"></property>
    <property name="web.lib" location="${web.WEB-INF}/lib"></property>
    <property environment="env"></property>
    
    <path id="compile">
        <fileset dir="${web.lib}" includes="*.jar"></fileset>
        <fileset dir="${env.CATALINA_HOME}/lib" includes="*.jar"></fileset>
    </path>
    
    <target name="init">
        <delete dir="${build.dir}"></delete>
        <mkdir dir="${build.dir}"/>
        <mkdir dir="${build.classes}"/>
        <mkdir dir="${build.war}"/>
    </target>
    
    <target name="compile" depends="init">
        <javac destdir="${build.classes}" srcdir="${src.dir}" classpathref="compile"></javac>
    </target>
    
    <target name="war" depends="compile">
        <war destfile="${build.war}/${web.name}.war">
            <fileset dir="${web.root}" includes="**/*.*"></fileset>
            <lib dir="${web.lib}"></lib>
            <webinf dir="${web.WEB-INF}"></webinf>
            <classes dir="${build.classes}"></classes>
        </war>
    </target>
    
    <presetdef name="sql-admin">
        <sql userid="root" password="123456" url="jdbc:mysql://localhost:3306/itat_msg?useUnicode=true&amp;characterEncoding=utf-8" driver="com.mysql.jdbc.Driver">
            <classpath refid="compile"></classpath>
        </sql>
    </presetdef>
    
    <target name="init-mysql">
        <sql-admin>
            <transaction>
                drop database ant_test;
                create database ant_test;
                GRANT ALL ON ant_test.* TO "ant_test"@"localhost" IDENTIFIED BY '123'
            </transaction>
        </sql-admin>
    </target>
    
    <target name="deploy" depends="war">
        <copy todir="${env.CATALINA_HOME}/webapps">
            <fileset dir="${build.war}" includes="${web.name}.war"></fileset>
        </copy>
    </target>
</project>


本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1751564

目录
相关文章
|
1天前
|
Linux Shell C语言
Linux:自动化构建 - make
Linux:自动化构建 - make
9 1
|
1天前
|
消息中间件 运维 Kubernetes
构建高效自动化运维体系:Ansible与Kubernetes的融合实践
【5月更文挑战第9天】随着云计算和微服务架构的普及,自动化运维成为确保系统可靠性和效率的关键。本文将深入探讨如何通过Ansible和Kubernetes的集成,构建一个强大的自动化运维体系。我们将分析Ansible的配置管理功能以及Kubernetes容器编排的优势,并展示如何将二者结合,以实现持续部署、快速扩展和高效管理现代云原生应用。文章还将涵盖实际案例,帮助读者理解在真实环境下如何利用这些工具优化运维流程。
|
3天前
|
Java Maven
Maven 自动化构建
Maven自动化构建确保依赖稳定性:当bus-core-api项目构建完成后,app-web-ui和app-desktop-ui项目自动构建。这两个项目依赖bus-core-api的1.0-SNAPSHOT版本。通过Maven,团队能高效管理项目间的依赖关系,实现无缝集成和更新。
|
3天前
|
数据库 Docker 容器
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
【5月更文挑战第8天】Dockerfile是构建Docker镜像的关键,它包含一系列指令,用于描述应用运行环境及所需软件包。通过自动化构建,能提高效率、保证可重复性并提升灵活性。确定基础镜像、安装依赖、设置环境后,执行Dockerfile生成镜像,用于应用程序部署。虽然需要熟悉Docker技术和应用细节,但其带来的益处使其成为现代软件开发和部署的重要工具。
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
|
3天前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Ansible的策略与实践
【5月更文挑战第8天】 在当今IT基础设施管理领域,自动化不再是一个选择,而是必要的步骤。随着复杂性的增加和变更的频繁性,自动化工具如Ansible提供了一种高效、可靠的解决方案来简化配置管理和多节点部署。本文将探讨如何利用Ansible构建一个高效的自动化运维体系,涵盖其核心原理、策略设计以及在实际环境中的应用。我们将分析Ansible与其他自动化工具的不同之处,并提供一些最佳实践,以帮助运维专家提升他们的工作效率和系统稳定性。
|
4天前
|
运维 负载均衡 持续交付
构建高效自动化运维体系:Ansible与Docker的协同实践
【5月更文挑战第7天】 在当今快速迭代的软件开发环境中,自动化运维成为确保部署效率和一致性的关键。本文将探讨如何通过结合Ansible和Docker技术,构建一个高效的自动化运维体系,旨在提升运维效率,减少人为错误,并实现持续集成与持续部署(CI/CD)的流程自动化。文章详细阐述了Ansible的配置管理机制、Docker容器化的优势,以及二者在实际运维场景中的结合应用,为读者提供一套可行的自动化运维解决方案。
|
5天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器化技术融合实践
【5月更文挑战第6天】随着企业IT架构的复杂化以及快速迭代的市场需求,传统的运维模式已难以满足高效率和高质量的交付标准。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系,旨在实现持续集成、持续部署和自动化管理,提升系统的可靠性、可维护性和敏捷性。
|
8天前
|
存储 运维 Kubernetes
构建高效自动化运维体系:Ansible与Kubernetes的协同实践
【5月更文挑战第2天】随着云计算和微服务架构的兴起,自动化运维成为保障系统稳定性与效率的关键。本文将深入探讨如何利用Ansible作为配置管理工具,结合Kubernetes容器编排能力,共同打造一个高效、可靠的自动化运维体系。通过剖析二者的整合策略及具体操作步骤,为读者提供一套提升运维效率、降低人为错误的实用解决方案。
|
10天前
|
机器学习/深度学习 运维 持续交付
构建高效自动化运维体系:Ansible与Docker的完美结合构建高效机器学习模型的五大技巧
【4月更文挑战第30天】 在当今快速发展的云计算和微服务架构时代,自动化运维已成为维持系统稳定性和提高效率的关键。本文将探讨如何通过结合Ansible和Docker技术构建一个高效的自动化运维体系。文章不仅介绍了Ansible与Docker的基本原理和优势,还详细阐述了如何整合这两种技术以简化部署流程、加强版本控制,并提高整体运维效率。通过案例分析,我们将展示这一组合在实际环境中的应用效果,以及它如何帮助企业实现持续集成和持续部署(CI/CD)的目标。 【4月更文挑战第30天】 在数据驱动的时代,构建一个高效的机器学习模型是获取洞察力和预测未来趋势的关键步骤。本文将分享五种实用的技巧,帮助数
|
10天前
|
敏捷开发 运维 测试技术
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【4月更文挑战第30天】在数字化转型的浪潮中,企业对软件交付速度和质量的要求日益提高。自动化运维作为提升效率、确保稳定性的关键手段,其重要性不言而喻。本文将探讨如何利用容器技术构建一个高效的自动化运维体系,实现从代码提交到产品上线的持续集成(CI)与持续部署(CD)。通过分析现代容器技术与传统虚拟化的差异,阐述容器化带来的轻量化、快速部署及易于管理的优势,并结合实例讲解如何在实际环境中搭建起一套完善的CI/CD流程。

热门文章

最新文章