前些天和同事交流,他说ant非常好用,他一直在用,学习资料共享后。这几天研究了一下,还真是不错,这里感谢河东的分享。
之前做过一个java的后台项目需要引入很多jar包,先是用fatjar的方式,将整个工程打成一个jar包进行发布的,一旦修改又要重新打包,上传服务器,费时费力。后来研究了一下MANIFEST.MF文件,可以将引用jar配置到这个文件里,虽然是成功了,但MANIFEST.MF的配置太过麻烦,格式要求过于严格。为此我还专门写了一段生成MANIFEST.MF的代码(见之前的文章MANIFEST.MF的应用以及如何读取jar包外的log4j.properties)。下面我们一步一步用ant来构建发布包。
ant的安装略过,apache网站上下载zip包后直接解压即可。本示例使用的是1.7.0版本。
1、示例工程的结构如下:
2、建立build.xml文件:
3、打开build.xml,输入如下内容
<?xml version="1.0" ?>
<project name="hlj_task Buildfile" default="compile" basedir=".">
<!-- 源文件路径 -->
<property name="src.dir" value="src" />
<property name="lib.dir" value="lib" />
<property name="config.dir" value="config" />
<!-- build路径 -->
<property name="build.dir" value="build" />
<property name="build.classes" value="${build.dir}/classes" />
<property name="build.lib" value="${build.dir}/lib" />
<property name="build.config" value="${build.dir}/config" />
<property name="build.bin" value="${build.dir}/bin" />
<!-- jar里MANIFEST.MF文件的属性 -->
<property name="jar.name" value="hlj_task.jar" />
<property name="jar.MainClass" value="com.boco.main.Main" />
<property name="jar.buildby" value="Shen XueLiang" />
<!-- 创建build文件夹 -->
<target name="prepare">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes}" />
<mkdir dir="${build.lib}" />
<mkdir dir="${build.config}" />
<mkdir dir="${build.bin}" />
</target>
<target name="clean" description="Removes all generated files.">
<delete dir="${build.dir}" />
</target>
<target name="delclass" description="Removes all classes files.">
<delete dir="${build.dir}/classes" />
</target>
<path id="classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="compile" depends="prepare" description="Compiles all source code.">
<javac srcdir="${src.dir}" destdir="${build.classes}">
<classpath refid="classpath" />
</javac>
</target>
<target name="copyjar">
<copy todir="${build.lib}">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</copy>
</target>
<target name="copyconf">
<copy todir="${build.config}">
<fileset dir="${config.dir}">
<include name="*.*"/>
</fileset>
</copy>
</target>
<!-- MANIFEST.MF文件的Class-Path属性 -->
<manifestclasspath property="jar.classpath"
jarfile="${src.dir}/${jar.name}"><!-- 可执行jar文件的路径,jar文件可以不存在,但${src.dir}必须存在 -->
<classpath>
<fileset dir="${lib.dir}"><!-- 依赖jar所在路径 -->
<include name="**/*.jar"/>
</fileset>
</classpath>
</manifestclasspath>
<target name="jar" depends="compile,copyjar,copyconf">
<jar jarfile="${build.bin}/${jar.name}"
basedir="${build.classes}">
<manifest>
<attribute name="Built-By" value="${jar.buildby}" />
<attribute name="Main-Class" value="${jar.MainClass}" />
<attribute name="Class-Path" value="${jar.classpath}" />
</manifest>
</jar>
</target>
<!-- jar包制作完成后,删除classes文件夹 -->
<target name="all" depends="clean,jar,delclass"
description="Cleans,compiles,then builds the JAR file." />
</project>
4、打开cmd窗口,进入工程路径,输入ant all
5、ant完成后,build文件夹的结构:
6、hlj_task.jar文件里,MANIFEST.MF的文件内容:
这样我们部署的时候,只要把build目录下的所有文件copy到服务器,然后在bin目录下启动hlj_task.jar就可以了。如果
有更新,我们只需要替换更新的jar即可。
分享到:
相关推荐
在本文中,我们将探讨JMeter、ant和Jenkins在这个框架中的作用以及它们如何协同工作来实现高效的接口测试。 首先,我们来看什么是接口测试。接口测试是指对系统组件间接口的测试,主要用于检测外部系统之间以及系统...
【Selenium自动化测试初探】 本文旨在探讨如何利用Selenium、JUnit和Hudson构建一个自动化测试框架。Selenium是一款强大的开源Web功能测试工具,支持多种编程语言,如Ruby、Python、Java、Perl和C#。它能直接在...
w e m ust con st ant ly imp rove th ef t ow n n etw o rk t echno log y, to b etter sa fegu ard the securi ty o f t h e net w ork env ironm ent £ K eyw or ds£" N et w ork securit y £» ...
3. **开发初探**:创建第一个页面,熟悉Ant Design的组件使用。自定义组件是提高代码复用的关键,因此理解如何创建和使用自定义组件也很重要。此外,设置Mock数据可以帮助在无后端接口时进行开发。 4. **API调用**:...
本手册主要讲解 SpringBlade 的开发手册,包括环境要求、环境准备、基础环境安装、Nacos 安装、Sentinel 安装、Seata 安装、插件安装、工程导入、工程运行、工程测试、开发初探、新建微服务工程、第一个 API、鉴权 ...
《MyP_Proyecto1:Java编程与建模初探——实现功能绘图器》 在编程领域,项目是理论知识与实践结合的最佳体现。本文将深入探讨名为"MyP_Proyecto1"的首个课程项目,它专注于“建模和编程”,尤其通过创建一个功能...
这意味着搜索“ant”不会匹配到“planting”,并且搜索结果会优先显示与查询条件最相符的条目。 2. **全文检索与数据库检索的差异** 与传统的SQL查询相比,全文检索在处理文本搜索时更有效。SQL查询可能会导致无关...
**1.5 初探PAFA** 初学者可以通过官方文档或示例项目了解PAFA的基本结构和工作原理。熟悉Spring框架的开发者将更容易上手PAFA。 **1.6 SPRING与PAFA的关系** Spring框架是PAFA的基础,PAFA在其之上进行扩展和定制...
**Chatta:初探Java GUI实现的客户端-服务器即时通讯应用** `Chatta` 是一个基于Java编程语言构建的GUI应用程序,它展示了如何利用Java图形用户界面(GUI)技术实现一个简单的客户端-服务器即时通讯(IM)系统。在...