第一章 探究起因

在做企业服务平台项目自动化测试时,笔者发现:同样的代码,在我本机运行就可以成功,但上传到我的云服务器上运行,日志里就会报出一个在上个月出现过的一个错误。总感觉云服务器上跑着的是一份旧的,有问题的代码,但是查看文件的时候明明src目录下的java文件都是最新的,所以这个问题困扰了我很久,怎么也解决不掉。

后来前两天和师傅闲聊,他提到一句“Jenkins里使用java命令运行代码时候,跑的不是java代码,而是编译好之后的class字节码文件”。我滴天,这么关键的点我怎么给忘了呀,多亏师傅一句话提点,才有了这几天产出的Ant批量编译探究总结。

我是将src目录下的代码以及testng.xml文件上传到自己的GitHub私有库中托管,然后在想要运行时,云服务器端自动从Git上pull一份代码来执行,也就是云服务器端实际上下载到的文件就只有java源代码。所以我所需要做的事情包括:


  1. 告诉Ant我的java文件需要依赖的代码在哪个目录下。
  2. 批量编译src目录下的所有java文件。
  3. 将编译后的class文件存放到指定的目录。
  4. 然后在写一个bat批处理脚本执行ant命令。

那么在开始之前我们就需要先安装一下Ant了。

第二章 安装Ant

直接到官网下载安装就行,这就无需多说了。

安装好之后,新建系统环境变量ANT_HOME,并在PATH中添加ANT_HOME目录下的bin目录和lib目录。

接下来测试一下配置:开始–>运行–>cmd打开命令行–>输入ant -version,回车。

如果看到Ant版本信息,那么恭喜你已经完成Ant配置。

第三章 编写build.xml文件

要运行Ant,需要保证你的运行目录中包含一个build.xml文件。毕竟是从0到1,写这个文件可真的是废了我一番功夫,过程就不提了,我直接把成果粘在这里好了,里面有我自己配的注释,很好懂:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义一个工程,默认任务为compile。basedir就是工程的存放路径 -->
<project name="qualinkTestProd" default="compile" basedir="C:\Dasym\CodeSpace\qualinkTestProd">

<!-- 指定依赖包路径,这里需要指定工程的路径 -->
<property name="compilePath" value="C:\Dasym\CodeSpace\qualinkTestProd"/>

<!-- 定义路径,编译java文件时用到的jar包。 -->
<path id="project.lib">
<fileset dir="${basedir}\lib">
<include name="**/*.jar"/>
</fileset>
</path>

<!-- 清空原有的class文件,创建新的存放路径。 -->
<target name="clean">
<delete dir="${compilePath}\bin" />
<mkdir dir="${compilePath}\bin" />
</target>

<!-- 定义任务,编译src文件夹中的java文件,编译后的class文件放到目标文件夹中(使用destdir指定存放目录)-->
<target name="compile" depends="clean">
<javac srcdir="${basedir}\src\qualinkTestProd" destdir="${compilePath}\bin" debug="true" includeantruntime="false" encoding="UTF-8" >
<classpath refid="project.lib">
</classpath>
</javac>
</target>
</project>

这里我再加个备注吧:

工程存放路径:C:\Dasym\CodeSpace\qualinkTestProd

class文件存放路径:C:\Dasym\CodeSpace\qualinkTestProd\bin

java文件存放路径:C:\Dasym\CodeSpace\qualinkTestProd\src

依赖jar包存放路径:C:\Dasym\CodeSpace\qualinkTestProd\lib

第四章 持续构建

我的build.xml文件是存放在C:\Dasym\CodeSpace\qualinkTestProd这个目录下的,所以此时直接使用cmd,cd到C:\Dasym\CodeSpace\qualinkTestProd目录,然后敲入ant,回车,就可以看到代码被成功编译,并且放入了

C:\Dasym\CodeSpace\qualinkTestProd\bin这个目录下。

但这样未免太麻烦,我们可以在Jenkins的中直接写入批处理命令,在自动构建时直接使用ant命令进行编译(命令写在Jenkins 的“构建”下面)。

4.1.小插曲【我太难了】

于是我在Jenkins中引用windows批处理脚本,也就是这个Execute Windows bach command:

使用Ant批量编译Java代码,并将Class文件存放至指定目录_java文件

在这里边直接写入call ant命令,但执行时候却发现失败了,报错如下图:

使用Ant批量编译Java代码,并将Class文件存放至指定目录_java_02

但我将call ant命令写在本地的bat脚本中,运行是完全正常的,为什么在Jenkins中同样使用批处理脚本就运行不起来了呢?

这一步真的痛苦,找了很多解决方案都解决不掉,网上写着各种解决方案,但是多数都是瞎说误导人的。比如下面这个:

又思考了很多解决方案,最后才灵机一动,“系统找不到指定的路径”,其实也就是没有找到对应的ANT_HOME环境变量,也就是说Jenkins并不知道ANT的环境变量路径是什么。要想告诉它Ant的安装路径,就只能通过安装插件并且在插件配置里写入路径。于是我从插件下手,在Jenkins中安装了对应的Ant插件,进行了相应的配置,才最终完成。

4.2.安装Ant插件

在Jenkins中安装Ant插件,网上有很多教程,大家可以对照着做。这里就不赘述了。

4.3.配置Ant插件

这一步就很重要了,Jenkins-Jenkins管理-全局工具配置-找到Ant

使用Ant批量编译Java代码,并将Class文件存放至指定目录_java_03

一定要取消掉Install Automatically前面的对勾,然后在其中填入自己的Ant名称以及ANT的安装路径。(名称可以随意写,最好是自己的ant版本号)

使用Ant批量编译Java代码,并将Class文件存放至指定目录_java文件_04

完成后点击保存即可。

4.4.配置工程

接下来我们打开对应的项目,进入配置,找到“构建”-“增加构建步骤”-“Invoke Ant”

使用Ant批量编译Java代码,并将Class文件存放至指定目录_java文件_05

增加一个Ant命令执行工具。

使用Ant批量编译Java代码,并将Class文件存放至指定目录_sed_06

在其中选择你的ant版本,并写入你的build.xml文件存放路径。保存。

这样我们再次执行脚本时,Jenkins便可以通过上述配置找到ANT的安装路径,并且找到对应的build.xml文件。执行Jenkins 的自动构建时,便可以自动调用Ant命令,自动编译。脚本执行成功!不会再报错啦!

至此便已完成全部配置,从开始做这个自己给自己布置的小任务,到完成,

再到现在把这些经验一步一步地写下来,真的融合了好一番心血呀。

做完之后看着代码正常运行起来的时候,幸福感油然而生。

最后,感谢师傅的提点~


软件测试工程师一只,也在不断的学习阶段,平时的小经验不定期分享。
博主经验有限,若有不足,欢迎交流,共同改进~
有意可加Q群 908417285 交流学习。
乾坤未定,你我皆是黑马