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. ...
随机推荐
- wepy相关
1.根据官方文档: $ npm install @wepy/cli -g # 全局安装 WePY CLI 工具 $ wepy init standard myproj # 使用 standard 模板 ...
- Flask【第3篇】:蓝图、基于DBUtils实现数据库连接池、上下文管理等
基于DBUtils实现数据库连接池 小知识: 1.子类继承父类的三种方式 class Dog(Animal): #子类 派生类 def __init__(self,name,breed, life_v ...
- NOIP2017 D2T2 宝藏
洛谷P3959 其实就是一道暴力搜索题……只是需要一个状态压缩的剪枝比较难想而已 这根本不叫dfs!只是一个递归而已……开始就被dfs坑了 思路: 首先一个基本的预处理 数据范围n≤12,m≤5000 ...
- 【leetcode】1124. Longest Well-Performing Interval
题目如下: We are given hours, a list of the number of hours worked per day for a given employee. A day i ...
- vue安装iview和配置
在命令行工具上输入:npm install iview --save 等待安装完成. 在项目的src/main.js中添加三行代码引入iview import iView from 'iview' i ...
- iOS Core Image-----十行代码实现微信朋友圈模糊效果
昨天下午微信的朋友圈着实火了一把,在这之后好多程序员都通过抓包工具看到了原图,但是我却在想,网上说是在移动前端做到的那是怎么做到的呢,经过一些学习,终于掌握了一些Core Image的知识,做出了相应 ...
- Javascript面试题解析
Javascript的一些面试题让很多同学感到头疼,下面就根据兄弟连教育 )毕业学员面试遇到的面试题,给大家做一个简单的分享,希望对初入职场的你们有一些帮助:Javascript面试题解析. 第一题 ...
- ASP.NET上传一个文件夹
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
- 解决报错:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized
Cannot create PoolableConnectionFactory (The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized . ...
- 修改springboot控制台输出的图案
原本启动springboot项目的日志是这样的: 但是我喜欢看见自己的名字,于是: 1.在src\main\resources文件夹下新建banner.txt 2.登录网站 patorjk.com/ ...