java web项目使用ant编译将不同的功能代码打包成jar,进而*点将项目打包成不同的tar.gz包进而部署

时间:2022-02-14 18:40:16

使用ant可以轻松的将一个项目分离代码,直接打包成不同需求的tar.gz包使用

1.build.properties (属性)

version.num=1.0 #版本信息

2.build.xml (ant打包文件)

java web项目使用ant编译将不同的功能代码打包成jar,进而*点将项目打包成不同的tar.gz包进而部署java web项目使用ant编译将不同的功能代码打包成jar,进而*点将项目打包成不同的tar.gz包进而部署
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="deploytargz" name="pomc">
    <!-- 引入配置文件 -->
    <property file="build.properties" />
    <!-- 配置引用属性 -->
    <property name="src.dir" value="src" />
    <property name="build.dir" value="build" />
    <property name="web.dir" value="WebRoot" />
    <property name="name" value="pomc" />
    <property name="target" value="1.8" />
    <property name="source" value="1.8" />

    <!-- 引用jar包的路径 -->
    <path id="pomc.classpath">
        <pathelement location="WebRoot/WEB-INF/classes" />
        <path refid="master-classpath" />
    </path>
    <path id="master-classpath">
        <fileset dir="${web.dir}/WEB-INF/lib">
            <include name="*.jar" />
            <include name="**/*.jar" />
        </fileset>
    </path>

    <!-- 初始化 -->
    <target name="init">
        <delete dir="${build.dir}/jar" />
        <mkdir dir="${build.dir}/jar" />
        <delete dir="${build.dir}/classes" />
        <mkdir dir="${build.dir}/classes" />
        <delete dir="${web.dir}/WEB-INF/classes" />
        <mkdir dir="${web.dir}/WEB-INF/classes" />

        <copy todir="${web.dir}/WEB-INF/classes" includeEmptyDirs="false">
            <!-- 将项目中除会编译生成class文件的java文件之外其他类型的文件拷贝到对应的目录下,排除指定文件名后缀 -->
            <fileset dir="${src.dir}">
                <exclude name="**/*.launch" />
                <exclude name="**/*.java" />
            </fileset>
        </copy>
    </target>

    <!-- 编译生成class文件 -->
    <target name="build" depends="init">
        <!-- 新建编译存放的classes文件 -->
        <mkdir dir="${build.dir}/classes" />
        <!-- java编译 -->
        <javac destdir="${build.dir}/classes" source="${source}" target="${target}" debug="true" deprecation="false" optimize="false" failonerror="true" encoding="utf-8">
            <src path="${src.dir}" />
            <!-- 编译所需要的jar包路径 -->
            <classpath refid="master-classpath" />
        </javac>
    </target>

    <!-- 将classes打包成jar包 -->
    <target name="jar" depends="build" description="Compress the java class files to jar">
        <mkdir dir="${build.dir}/jar" />
        <delete file="${build.dir}/jar/${name}.jar" />
        <buildnumber file="./buildnum.txt" />
        <!-- 指定时间戳 可以调用TODAY -->
        <tstamp>
            <format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss" />
        </tstamp>
        <!-- 生成清单文件 -->
        <manifest file="${web.dir}/META-INF/MANIFEST.MF">
            <attribute name="Built-By" value="${user.name}" />
            <attribute name="Implementation-Version" value="${version.num}.${build.number}" />
            <attribute name="Built-Date" value="${TODAY}" />
        </manifest>
        <!-- 打包jar -->
        <!-- includes 包含哪些后缀文件 空格分隔 -->
        <jar destfile="${build.dir}/jar/${name}.jar" basedir="${build.dir}/classes" includes="**/*.class" manifest="${web.dir}/META-INF/MANIFEST.MF" />
    </target>

    <!-- depends指的是执行该任务,会先执行那个任务 -->
    <target name="deploytargz" depends="jar" description="Deploy application as a tar.gz file">
        <!-- 指定时间戳 可以调用VERSIONDAY -->
        <tstamp>
            <format property="VERSIONDAY" pattern="yyyyMMdd" />
        </tstamp>
        <!-- 将之前编译生成的classes路径下的编译结果拷贝到WEB路径下 -->
        <copy todir="${web.dir}/WEB-INF/lib" overwrite="true">
            <fileset dir="${build.dir}/jar">
            </fileset>
        </copy>
        <!-- 打包tar.gz -->
        <tar destfile="${name}${VERSIONDAY}.tar.gz" basedir="${web.dir}" compression="gzip" />

        <!-- 将tar.gz包拷贝到build的war目录下 -->
        <copy todir="${build.dir}" preservelastmodified="true">
            <fileset dir=".">
                <include name="*.tar.gz" />
            </fileset>
        </copy>
    </target>

    <target name="cleanup">
        <!-- 删除编译文件夹 -->
        <delete dir="${build.dir}/classes" />
        <delete>
            <fileset dir="." includes="*.tar.gz"/>
        </delete>
    </target>
</project>
View Code