ant 打包war 遇到的一些问题

1、源码放在多个源码目录(source floder)下,而且其中的代码存在相互引用,这样按正常的方法编译的时候就会存在问题

处理方法:

在init的时候创建一个临时的源码目录src,使用copy方法将多个源码目录的内容复制在src中,然后使用这个src进行编译就可以了。

代码段落:

  <copy todir="${src.dir}">
            <fileset dir="${basedir}/[源码目录1]">
                <include name="**/*.java"/>
            </fileset>
        </copy>
        <copy todir="${src.dir}">
            <fileset dir="${basedir}/[源码目录2]">
                <include name="**/*.java"/>
            </fileset>
        </copy>

2、ant中排除文件夹的方法

   <fileset dir="${webcontent.dir}">
                <exclude name="**/*.classes" />
                <exclude name="**/config.properties" />
                <exclude name="WEB-INF/conf/**"/>
                <exclude name="WEB-INF/modules/**"/>
                <exclude name="WEB-INF/services/**"/>
                <exclude name="WEB-INF/lib/**"/>
            </fileset>

要排除文件夹的话,就使用 "目录/" 或者 "目录/**"

"目录/*.*" 是排除目录下所有的文件

以下是我编写的build.xml 例子:

<?xml version="1.0"?>  
  
<project default="localDeployWar" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant">  
  
    <echo message="pulling in property files" />  
    <property file="build.properties" />   
    <!--  定义项目名称  -->  
    <property name="project.name" value="[项目名称/war包名称]" />  
    <!--  源代码路径  -->  
    <property name="src.dir" value="${basedir}/target/src" />  
     <property name="src.dir1" value="${basedir}/target/src" />  
    <!--  定义jar包名称  -->  
    <!--<property name="jar.name" value="com.xx" />-->  
    <!--  定义war名称  -->  
    <property name="war.name" value="${project.name}" />  
    <!--  定义 web 容器的部署路径  -->  
    <property name="localWebServer.home" value="D:\apache-tomcat-7/" />
    <!--  定义 文件输出路径  -->  
    <property name="outFileDir" value="war包目录" />  
  
    <!--  编译的目标路径  -->  
    <property name="dist.dir" value="${basedir}/target" />  
    <property name="dist.classes.dir" value="${dist.dir}/classes" />  
    <property name="dist.jar.dir" value="${dist.dir}/jar" />  
    <property name="dist.war.dir" value="${dist.dir}/war" />  
    <!-- WebContent 结构下的几个路径  -->  
    <property name="webcontent.dir" value="./WebContent" />  
    <property name="webcontent.webinf.dir" value="${webcontent.dir}/WEB-INF" />  
    
    <!-- 加载ivy文件 -->
    <ivy:settings file="ivysettings.xml" />
    <target name="resolve" description="--> parse ivy.xml">
        <ivy:resolve file="ivy.xml" conf="*" />
        <ivy:cachepath pathid="ivy.libs.compile" type="jar,bundle" conf="default" />
        <ivy:cachepath pathid="ivy.libs.test" type="jar,bundle" conf="default" />
        <ivy:cachepath pathid="ivy.libs.runtime" type="jar,bundle" conf="default" />
    </target>
  
    <!--  定义 classpath 路径,抽象定义,可以多处引用  -->  
    <path id="classpath">  
        <!-- 项目的jar包-->  
        <!--
        <fileset dir="${webcontent.webinf.dir}/lib">  
            <include name="**/*.jar" />  
        </fileset>  
        -->
        <!-- 项目的classes文件-->  
        <pathelement location="${webcontent.webinf.dir}/classes " />  
        <!-- web 服务器的jar包--> 
        <!--
        <fileset dir="${localWebServer.home}/lib">  
            <include name="**/*.jar" />  
        </fileset> 
        --> 
    </path>  
    <!--  初始化删除、创建 classes 路径  -->  
    <target name="init"> 
        <echo message=" ======  初始化创建build.dir编译目录  ======" />  
        <delete dir="${dist.dir}" /> 
        <delete dir="${src.dir}" />
        <mkdir dir="${dist.dir}" />  
        <mkdir dir="${dist.jar.dir}" />  
        <mkdir dir="${dist.war.dir}" />  
        <mkdir dir="${src.dir}"/>
        <copy todir="${src.dir}">
            <fileset dir="${basedir}/[源码目录]">
                <include name="**/*.java"/>
            </fileset>
        </copy>
        <echo message=" ======  初始化WebContent.classes创建编译目录  ======" />  
        <!-- WebContent 下的 classes -->  
        <mkdir dir="${dist.classes.dir}" />  
    </target>  
    <!--  编译 java 文件,编译到 dist.classes 下-->  
    <target name="compile" depends="init,resolve">  
        <echo message=" ======  编译源代码 复制到 dist.classes 目录 ======" />  
        <javac encoding="utf-8" srcdir="${src.dir}" destdir="${dist.classes.dir}" fork="yes" executable="C:/Program Files/Java/jdk1.7.0_45/bin/javac"  debug="on" includeantruntime="on" deprecation="false" optimize="true" failonerror="true">  
             <compilerarg value="-Xlint:unchecked" />
               <compilerarg value="-Xlint:deprecation" />
               <classpath>
                <path refid="ivy.libs.compile" />
               </classpath>
        </javac>  
        <!-- 格式 二  <javac  srcdir="${src.dir} "  destdir="${build.classes.dir}" classpathref="classpath" />  -->  
  
        <echo message=" ======  将重新编译的classes文件复制到classes目录下 ======" />  
        <copy todir="${webcontent.webinf.dir}/classes">  
            <fileset dir="${dist.classes.dir}">  
                <exclude name="**/*Test*.*" />  
            </fileset>  
        </copy>  
          
    </target>  
    <target name="test" depends="compile" description="Junit 测试,暂无">  
        <echo message=" ====== Junit 测试,暂无 ======" />  
    </target> 
    
    <!--6、打成WAR包 -->
    <target name="buildwar" depends="compile">
        <echo message="======  打 war 包  ======" />
        <war destfile="${dist.war.dir}/${war.name}.war" webxml="${webcontent.dir}/WEB-INF/web.xml">
            <fileset dir="${webcontent.dir}">
                <exclude name="**/*.classes" />
                <exclude name="**/config.properties" />
                <exclude name="WEB-INF/conf/**"/>
                <exclude name="WEB-INF/modules/**"/>
                <exclude name="WEB-INF/services/**"/>
                <exclude name="WEB-INF/lib/**"/>
            </fileset>

            <classes dir="${dist.classes.dir}" />
            <mappedresources>
                <restrict>
                    <path refid="ivy.libs.runtime" />
                    <type type="file" />
                </restrict>
                <chainedmapper>
                    <flattenmapper />
                    <globmapper from="*" to="WEB-INF/lib/*" />
                </chainedmapper>
            </mappedresources>
        </war>
    </target>
  
    <target name="localDeployWar" depends="buildwar" description="将war包复制到指定文件夹">  
        <echo message="将war包复制到指定文件夹" />  
        <copy todir="${outFileDir}" overwrite="true">  
            <fileset file="${dist.war.dir}/${war.name}.war" />  
        </copy>
        <echo message="删除临时文件" />  
        <delete dir="${basedir}/target/"></delete>
    </target> 
    <!--
    <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" />  
    <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask" />  
    -->
  
      
</project>  
View Code

猜你喜欢

转载自www.cnblogs.com/dfuzh/p/9166617.html