Ant-编译构建(2)-第3方jar包引入、log4j2
1、项目目录结构图,lib包引入了一些关于common logging+log4j2相关的jar。

2、编写相关的build.xml
<?xml version="1.0" encoding="utf-8"?>
<!--定义生成文件的project根元素,默认的target为空-->
<project name="log4j2Test" basedir="." default="all">
<target name="all" depends="help,init,compile,build,run,clean">
<echo>Finish!</echo>
</target> <!--定义4个简单属性-->
<property name="src" value="src"/>
<property name="classes" value="classes"/>
<property name="lib" value="lib"/>
<property name="dest" value="dest"/>
<property name="log" value="log"/> <!--定义help target,用于输出该生成文件的帮助信息-->
<target name="help" description="打印帮助信息">
<echo>help - 打印帮助信息</echo>
<echo>complie - 编译Java源文件</echo>
<echo>run - 运行程序</echo>
<echo>build - 打包Jar包</echo>
<echo>clean - 清除所有编译生成的文件</echo>
</target> <!--init target,初始化-->
<target name="init">
<delete dir="${classes}"/>
<mkdir dir="${classes}"/>
<delete dir="${dest}"/>
<mkdir dir="${dest}"/>
<delete dir="${log}"/>
<mkdir dir="${log}"/>
</target> <!--定义一组文件路径集-->
<path id="classpath">
<fileset dir="${lib}">
<include name="**/*.jar"/>
</fileset>
<pathelement path="${classes}"/>
</path> <!--定义complie target,用于编译Java源文件-->
<target name="compile" description="编译java源文件">
<!--编译java文件,编译后的class文件放到classes属性所代表的文件夹内-->
<javac destdir="${classes}" includeantruntime="yes" encoding="utf-8">
<!--指定需要编译的Java文件所在的位置-->
<src path="${src}"/>
<!--指定编译Java文件所需要的第三方类库所在的位置-->
<classpath refid="classpath"/>
</javac>
</target> <!--定义build target,用于打包jar文件,运行该target之前会先运行compile target-->
<target name="build" description="打包jar文件" depends="compile">
<!--将项目中除编译生成class文件的java文件之外的其他类型文件拷贝到对应的文件夹-->
<copy todir="${classes}">
<fileset dir=".">
<include name="log4j2.xml"/>
<include name="说明.txt"/>
</fileset>
</copy>
<!--指定将classes属性所代表的文件夹下的所有*.class文件都打包到app.jar文件中-->
<jar destfile="${dest}/app-1.0.2.jar" basedir="${classes}" includes="**/*.class **/*.xml **/*.txt">
<!--为jar包的清单文件添加属性-->
<manifest>
<attribute name="Main-Class" value="src.com.lfy.Student"/>
</manifest>
<!--将相关被引用的包以解压后的方式打包进jar包中-->
<zipfileset src="${lib}/commons-logging-1.2.jar"></zipfileset>
<zipfileset src="${lib}/log4j-jcl-2.12.0.jar"></zipfileset>
<zipfileset src="${lib}/log4j-core-2.12.0.jar"></zipfileset>
<zipfileset src="${lib}/log4j-api-2.12.0.jar"></zipfileset>
</jar>
<!--打包第3方jar通过引用的方式运行的可执行jar-->
<jar destfile="${dest}/app-1.0.3.jar" basedir="${classes}" includes="**/*.class **/*.xml **/*.txt">
<!--为jar包的清单文件添加属性-->
<manifest>
<attribute name="Main-Class" value="src.com.lfy.Student"/>
</manifest>
<!--将相关被引用的包以解压后的方式打包进jar包中-->
<zipfileset src="${lib}/commons-logging-1.2.jar"></zipfileset>
<zipfileset src="${lib}/log4j-jcl-2.12.0.jar"></zipfileset>
<zipfileset src="${lib}/log4j-core-2.12.0.jar"></zipfileset>
<zipfileset src="${lib}/log4j-api-2.12.0.jar"></zipfileset>
</jar>
</target> <!--定义run target,用于运行Java源文件,运行该target之前会先运行compile target-->
<target name="run" description="运行程序" depends="compile">
<!--运行lfy.HelloWorld类,其中fork指定启动另一个JVM来执行Java命令-->
<java classname="src.com.lfy.Student" fork="yes" failonerror="true">
<classpath refid="classpath"/>
<!--运行Java程序时传入2个参数-->
<arg line="测试参数1 测试参数2"/>
</java>
<!--运行可执行jar文件-->
<java jar="${dest}/app-1.0.2.jar" fork="yes" failonerror="true">
<!--运行Java程序时传入2个参数-->
<arg line="p1 p2"/>
</java>
<java jar="${dest}/app-1.0.3.jar" fork="yes" failonerror="true">
<!--运行Java程序时传入2个参数-->
<arg line="p1 p2"/>
</java>
</target> <!--定义clean target,用于删除所有编译生成的文件-->
<target name="clean" description="清除所有编译生成的文件">
<delete dir="${classes}"/>
<delete dir="${dest}"/>
<delete dir="${log}"/>
</target> </project>
3、编写log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<!-- 定义日志格式 -->
<Property name="log.pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}%n%msg%n%n</Property>
<!-- 定义文件名变量 -->
<Property name="file.all.filename">log/all.log</Property>
<Property name="file.all.pattern">log/all.%i.log.gz</Property>
<Property name="file.err.filename">log/err.log</Property>
<Property name="file.err.pattern">log/err.%i.log.gz</Property>
</Properties>
<!-- 定义Appender,即目的地 -->
<Appenders>
<!-- 定义输出到控制台 -->
<Console name="console" target="SYSTEM_OUT">
<!-- 日志格式引用上面定义的log.pattern -->
<PatternLayout pattern="${log.pattern}"/>
</Console>
<!-- 定义输出到文件,文件名引用上面定义的file.all.file.filename -->
<RollingFile name="all" bufferedIO="true" fileName="${file.all.filename}" filePattern="${file.all.pattern}">
<PatternLayout pattern="${log.pattern}"/>
<Policies>
<!-- 根据文件大小自动切割日志 -->
<SizeBasedTriggeringPolicy size="10 KB" />
</Policies>
<!-- 保留最近5份 -->
<DefaultRolloverStrategy max="5" />
</RollingFile>
<!-- 定义输出到文件,文件名引用上面定义的file.err.file.filename -->
<RollingFile name="err" bufferedIO="true" fileName="${file.err.filename}" filePattern="${file.err.pattern}">
<PatternLayout pattern="${log.pattern}"/>
<Policies>
<!-- 根据文件大小自动切割日志 -->
<SizeBasedTriggeringPolicy size="2 KB" />
</Policies>
<!-- 保留最近5份 -->
<DefaultRolloverStrategy max="5" />
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<!-- 对info级别的日志,输出到console -->
<AppenderRef ref="console" level="info"/>
<!-- 对info级别的日志,输出到all,即上面定义的RollingFile -->
<AppenderRef ref="all" level="info"/>
<!-- 对error级别的日志,输出到err,即上面定义的RollingFile -->
<AppenderRef ref="err" level="error"/>
</Root>
</Loggers>
</Configuration>
4、编写Person.java、Student.java
Person.java
package src.com.lfy; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; public class Person{
/**
* 使用LogFactory.getLog(getClass()),也可以使用LogFactory.getLog(Person.class)
* 前者可以使子类的实例直接使用log,看Student.java中的代码
*/
protected final Log log=LogFactory.getLog(getClass());
void foo(){
log.info("Person.foo()");
}
}
Student.java
package src.com.lfy;
public class Student extends Person{
void bar(){
log.info("Student.bar()");
try{
int a=5,b=1;
b=a/0;
}catch(Exception e){
//捕获异常非常简单
log.error("got exception",e);
}
}
public static void main(String[] agrs){
Student stu=new Student();
stu.bar();
}
}
5、运行结果

6、总结:实现了简单的log4j应用。
Ant-编译构建(2)-第3方jar包引入、log4j2的更多相关文章
- 如何利用maven将本地jar包引入到工程之中
1.在个人开发模式下,可以将jar包放入项目的lib目录中,在pom.xml中做如下配置: <dependencies> <dependency> <groupId> ...
- [Android]proguard重新编译和如何不混淆第三方jar包
转载自:http://glblong.blog.51cto.com/3058613/1536516 一.ant安装.环境变量配置及验证 (一)安装ant 到官方主页http://ant.apache. ...
- 构建Maven项目自动下载jar包
使用Maven 自动下载jar包 右键单击项目,将项目 转换成Maven 项目 然后进去Maven官网 http://mvnrepository.com/ 这里有大量的jar包供我们使用,比如我现在要 ...
- 【转】构建Maven项目自动下载jar包
原文地址:https://blog.csdn.net/gfd54gd5f46/article/details/54973954 使用Maven 自动下载jar包 右键单击项目,将项目 转换成Maven ...
- eclipse把jar包引入项目的两种方法
方法一: build path引入jar包 方法二: 把jar包放入lib文件夹 区别: 把jar包放入lib文件夹,以后把程序发给别人,别人可以直接运行而无需再自己添加jar包 总结: 1.有时即使 ...
- jjava:将jar包引入环境变量的一个骚操作以及因此搞出来的扑街问题
现在我有一个java文件,我只想javac启动,但是这货import了一堆jar里面的东西. 于是我下回了所有的jar包,将这些jar包丢到jdk1.8.0_162\jre\lib\ext里面就ok了 ...
- 04-SSH综合案例:环境搭建之jar包引入
刚才已经把表关系的分析已经分析完了,现在呢就先不去创建这个表,写到哪儿的时候再去创建这个表. 1.4 SSH环境搭建: 1.4.1 第一步:创建一个web项目. 1.4.2 第二步:导入相应jar包. ...
- 怎样把本地的jar包引入到maven工程里面
有些jar包在maven库里面查找不到,但是maven项目又有用到,此时最简单的方法就是把该jar包放到工程底下某个目录,然后在pom.xml里面配置dependency引入它. 具体如何操作呢? 假 ...
- jenkins#构建并部署springboot的jar包
0. 前提是有一个可以用的没有问题的Jenkins环境,这是基础 1. 安装publish over ssh 插件,(如果网速太慢,请去github 克隆代码,然后自己构建,然后上传安装此插件) 2. ...
随机推荐
- [洛谷P4823] TJOI2013 拯救小矮人
问题描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口. 对于每一个小矮人,我们知道他从 ...
- 对postcss以及less和sass的研究
1.postcss PostCSS 的主要功能只有两个:第一个就是前面提到的把 CSS 解析成 JavaScript 可以操作的 抽象语法树结构(Abstract Syntax Tree,AST),第 ...
- 第七周作业—N42-虚怀若谷
一.简述OSI七层模型和TCP/IP五层模型 1. OSI七层模型 物理层:二进制传输,为启动.维护以及关闭物理链路定义了电气规范.机械规范.过程规范和功能规范:实际的最终信号的传输是通过物理层实现的 ...
- linux运维、架构之路-xtrabackup
一.XtraBackup介绍 1.备份工具 xtrabackup:是一款基于InnoDB的在线热备工具,具有开源,免费,支持在线热备,占用磁盘空间小,能够非常快速地 ...
- window7下docker toolbox 启用数据卷报错: Error response from daemon: invalid mode:
场景:希望把d:\dockerShare文件夹作为数据卷 ,和docker中的centos镜像生成的容器关联. 原来的命令: docker run -d -it --name=edc-centos7 ...
- c++复习——类(2)
1.this指针 this指针是一个指向对象的指针. this指针是一个隐含于成员函数中的对象指针. this指针是一个指向正在调用成员函数的对象的指针. 类的静态成员函数没有this指针 ...
- nginx 静态资源WEB服务
1.静态资源类型 非服务器动态运行生成的文件 类型种类 浏览器端渲染 HTML.CSS.JS 图片 JPEG.GIF.PNG 视频 FLV.MPEG ...
- IDEA插件之自动查找bug工具
打开idea 插件搜索界面 输入 FindBugs-IDEA,安装完成后重启,选中要查找的包,右键找到对应的 FindBugs就可以开始进行自动扫描了
- VMware 15 搭建win 10 实操步骤+共享文件+激活操作
写于:2018.12.22 一.简介: VMware 15 里搭建win 10是件很坑的事.我尝试了3种方法,最后才搭建成功.为了不让网友们不在走我走过的坑,特写了本文. 坑一:用老毛桃.大白菜搭 ...
- Linux 设置端口转发
ps -ef | grep 10020 --查询10020端口是否被使用kill -9 86971 --结束使用10020端口的进程 ssh -C -f -N -g -L 18889: ...