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. ...
随机推荐
- 以太坊智能合约开发工具 Truffle 入门1
Truffle是以太坊(Ethereum)智能合约开发的瑞士军刀,小巧好用,上手简单. 本篇文章主要展示如何用Truffle 开发第一个Ethereum智能合约. 1.准备工作:(本人针对window ...
- java 分页对象以及数据库分页查询
import java.util.List; public class Pager<T> { private Integer pageSize; private Integer total ...
- linux ab 压测
https://www.cnblogs.com/shenshangzz/p/8340640.html https://www.cnblogs.com/shenshangzz/p/8340640.htm ...
- Proxy + Reflect 实现 响应的数据变化
Proxy 对象用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等) let p = new Proxy(target, handler); get(target, propKey, r ...
- mac下安装 rabbitMq
1.安装HomeBrew,如果已经安装这一步跳过. 2.用brew install rabbitmq指令即可进行rabbitmq服务的自动安装. 3.安装完成之后会出现一下提示: rabbit安装 ...
- HBase设计规范(转载)
在这里讲什么设计规范实在是有些不知天高地厚,毕竟笔者本人也只是一个大数据技术的初学者,断然不敢制订什么设计规范的,所以请原谅我的狂妄,这个设计规范,只是本人对自己制订的,与别人无关. 之前,HBase ...
- Vuex-全局状态管理【传递参数】
src根目录 新建store文件夹,新建index.js 作为入口 在store文件夹中 新建modules文件夹 modules文件夹中,新建 a.js b.js 2个文件 a.js const s ...
- 华为云服务器centos7.3 安装jdk
1. 进入oracle官网 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 服 ...
- webstorm注册码,亲测2016.1.1版
打开webstorm,点击帮助,注册 注册时,在打开的License Activation窗口中选择“License server”,在输入框输入下面的网址: http://idea.iteblog. ...
- 封装类和非封装类比较相同不int和Integer
A.所有和int(非封装类比较的,只要数值相同就行) B.io3由valueof弄出来的,所以和io1相同 C.io4是new出来的,所以地址不一样,就不相同 D.和A相同