【小试牛刀】使用Apache Ant对Java项目进行源码编译归档war包

文章目录

      • 项目背景
      • 1、准备Apache Ant环境
      • 3、Ant配置文件准备&打war包(两个配置文件全部在xml目录中)
        • 3.1、build.properties参数配置文件
        • 3.2、build.xml Ant运行配置文件
        • 3.3、运行Ant对HelloWorld项目打一个war包
      • 4、war包部署到tomcat
      • 5、访问测试
      • 6、写到最后

项目背景

项目在不使用mave管理的情况下,怎么快捷的在线上进行打包部署?
如果每次都需要本地编译打包然后部署到线上,这无疑是非常麻烦的,如果能把源码推送到线上,源码更新之后直接在线上完成一键打包部署就非常方便了。
下面要介绍的就是,非maven管理的项目使用Ant来编译源码,生成jar包或者war包去部署。

1、准备Apache Ant环境

Apache官网下载最新版本的Ant,下载成功之后上传至Linux服务器。
【小试牛刀】使用Apache Ant对Java项目进行源码编译归档war包_第1张图片
上传过程省略,我这里上传目录为:/dz/dz_ant/
解压文件:

cd /dz/dz_ant/
#解压
tar -zxf apache-ant-1.9.16-bin.tar.gz
#修改解压后的文件名
mv apache-ant-1.9.16 ant

【小试牛刀】使用Apache Ant对Java项目进行源码编译归档war包_第2张图片
测试运行:如果输出build.xml不存在说明ant已经可以使用,后面补充上配置文件即可对指定项目打包
【小试牛刀】使用Apache Ant对Java项目进行源码编译归档war包_第3张图片

2、准备JavaWeb项目&源码上传至服务器
目录结构:
【小试牛刀】使用Apache Ant对Java项目进行源码编译归档war包_第4张图片
部分代码:

package com.dz.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @WebServlet(name = "HelloWorld", value = "/sayHello")注解监听并拦截请求,代替了web.xml中关于servlet的映射配置
 * =================================>注解效果等同于如下配置
        
            HelloWorld
            com.example.servlet.ActionServlet
        
        
            HelloWorld
            /sayHello
        
 */
@WebServlet(name = "HelloWorld", value = "/sayHello")
public class HelloWorldServlet extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置请求编码格式
        req.setCharacterEncoding("utf8");
        // 设置响应编码格式
        resp.setContentType("text/html;charset=utf-8");

        // 获取参数
        String param = req.getParameter("param");
        System.out.println("Apache Ant..." + param);

        // 响应到页面
        resp.getWriter().write("Apache Ant Say:HelloWorld!");
    }


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

源码上传至服务器&项目目录结构,上传位置:/dz/dz_ant
【小试牛刀】使用Apache Ant对Java项目进行源码编译归档war包_第5张图片
使用Ant要做的就是,对src进行编译(代码编译&资源文件编译)&一些资源文件复制(web)

3、Ant配置文件准备&打war包(两个配置文件全部在xml目录中)

接下来要做的就是,进入HelloWorld项目之后,使用Antsrc源码进行编译,并输出编译后的文件到/dz/dz_ant/webapps目录下。

3.1、build.properties参数配置文件

# 作者 dongzi
# 描述
#   1. 关于ant构建项目的一些通用配置项
#   2. 在使用时直接引入此配置文件,加载对应的配置,而不必手动依次修改构建信息
#####################################

# 项目名
project.name=HelloWorld
# HelloWorld项目所在文件夹
build.project.dir=/dz/dz_ant
# 编译后的classes文件复制到这里
build.target.dir=/dz/dz_ant/target
# 最终要使用此webapps目录进行war包的归档
build.dist.dir=/dz/dz_ant/webapps
# ant所在目录
build.ant.dir=/dz/dz_ant/ant
# 生成war包输出位置
build.war.dir=/dz/dz_ant/war
# 生成jar包输出位置
buildjar.dir=/dz/dz_ant/jar

3.2、build.xml Ant运行配置文件

具体的配置描述通过注释的方式写在文件里了。



<project name="project" default="compile">
  
	<property file="build.properties" />
	
		
        <target name="init">
				
                <delete dir="${build.target.dir}" />
				
                <delete dir="${build.dist.dir}" />
                
                <mkdir dir="${build.dist.dir}" />
                
                <mkdir dir="${build.dist.dir}/WEB-INF/lib" />
                
                <mkdir dir="${build.dist.dir}/WEB-INF/classes" />
                
                <mkdir dir="${build.target.dir}/classes" />
    		target>

		
        <target name="compile" depends="init">
				
                <echo message="begin compile java src" />
				
                <javac srcdir="${build.project.dir}/${project.name}/src" destdir="${build.target.dir}/classes"  debug="on" debuglevel="lines,vars,source" nowarn="true" failonerror="true" >
                        <compilerarg line="-encoding UTF-8"/>
						
                        <classpath>
                                <fileset dir="${build.project.dir}/${project.name}/web/WEB-INF/lib" includes="*.jar" />
                        classpath>
                        <include name="**/*.*" />
                javac>

                <echo message="package compiled classes" />

                
                <copy todir="${build.dist.dir}">
                        <fileset dir="${build.project.dir}/${project.name}/web/" includes="**/*.*"/>
                copy>

                
                
                
                
               

                
                <jar destfile="${build.dist.dir}/WEB-INF/lib/dz.jar">
                        <fileset dir="${build.target.dir}/classes">
                                <include name="**/*.*" />
                        fileset>
                jar>

                

                
        	
        target>

		
        <target name="war" depends="compile">
                <echo message="begin to create war" />
                
                <jar destfile="${build.war.dir}/${project.name}.war" >
                        
                        <fileset dir="${build.dist.dir}/">
                                 
                                <exclude name="**/jetty-server*.jar"/>
                        fileset>
                jar>
                <echo message="create war complete" />
        target>
project>

3.3、运行Ant对HelloWorld项目打一个war包

cd /dz/dz_ant # 进入ant所在目录

【小试牛刀】使用Apache Ant对Java项目进行源码编译归档war包_第6张图片

#在当前目录,运行以下命令
./ant/bin/ant --help
#指定打包要使用的配置文件
./ant/bin/ant -f xml/build.xml war
=======================>
#为什么命令最后要使用war???
使用war是指定要执行哪一个target,因为target执行过程中有依赖的上一项,所以执行最后一个target war,会执行完成整个build.xml配置的选项。如果单独执行某一项target,如:
./ant/bin/ant -f xml/build.xml init
它只会做一些预处理,删除和创建一些文件,依次类推。

【小试牛刀】使用Apache Ant对Java项目进行源码编译归档war包_第7张图片
至此,完成了项目编译以及war包的打包过程。

4、war包部署到tomcat

tomcat具体安装过程不在详细描述,安装tomcat可以参照:CentOS7安装Tomcat
写一些简单的脚本将/dz/dz_ant/war下面的HelloWorld.war部署到tomcat的webapp下面。
tomcat安装路径/dz/app/tomcat_helloworld

#先删除tomcat已经部署的HelloWorld项目,如果tomcat是运行的需要先停止
kill -9 ps -ef | grep tomcat_helloworld | grep -v grep | awk '{print $2}'
cd /dz/app/tomcat_helloworld/webapps
rm -rf HelloWorld*
cd /dz/dz_ant/war
cp -r HelloWorld.war /dz/app/tomcat_helloworld/webapps
#重新启动tomcat
./dz/app/tomcat_helloworld/startup.sh
#查看启动日志
tail -f /dz/app/tomcat_helloworld/logs/catalina.out

【小试牛刀】使用Apache Ant对Java项目进行源码编译归档war包_第8张图片

5、访问测试

【小试牛刀】使用Apache Ant对Java项目进行源码编译归档war包_第9张图片
【小试牛刀】使用Apache Ant对Java项目进行源码编译归档war包_第10张图片
是不是访问成功并且已经符合预期了呢?

6、写到最后

Ant打包过程总结:

  1. 预先处理一些要使用到的文件或文件夹(target name=init时的操作);
  2. 使用javac对源码进行编译,其中也包括将资源文件&web文件的复制到一起,方便归档;(target name=compile时的操作)
  3. 对compile已经编译好&复制到一起的文件进行归档,归档格式为war;(target name=war时的操作)

  1. 为什么全文一直使用的是./ant/bin/ant执行,而不是ant执行?

    因为这里就一个地方用到了ant,所以没有配置环境变量,有需要的话可以把环境变量配置上。

    #配置ant环境变量
    vi /etc/profile
    #最后加入两行配置
    export ANT_HOME=/dz/dz_ant/ant
    export PATH= P A T H : PATH: PATH:ANT_HOME/bin
    #完成后保存,刷新配置文件
    source /etc/profile
    #再使用ant命令就可以使用了
    ant

  2. 因为这个项目里面没有加载更多的配置文件,所以要加载的话还需要再tartget name=compile编译过程中,进行资源文件的copy(copy的位置就是classes同级路径的classpath下面)

你可能感兴趣的:(#,java,#,linux,java,apache,linux,ant)