常用 Maven 组件 pom 配置,import 及使用【持续更新】

2019年08月08日 14:55 · 阅读(2197) ·

开发环境

名称 版本
操作系统 Windows 10 X64
JDK JDK1.8(jdk-8u151-windows-x64)
IntelliJ IDEA IntelliJ IDEA 2018.3
Maven Maven 3.6.0

Maven-查找 maven 依赖方法

Maven-查找 maven 依赖方法

本文中常用的查看方法

本文中需要查看编译后的代码和代码结构,方便对比引用前后的代码

查看编译后的代码

target-classes-com-test

查看代码结构-Structure

视图-工具窗口-Structure

想看哪个类就在对应目录中点哪个代码文件

lombok

介绍

Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。

Java开发中用到的,lombok是什么?

Lombok 看这篇就够了

pom.xml 配置

  1. <properties>
  2. <lombok.version>1.18.6</lombok.version>
  3. </properties>
  4. <dependencies>
  5. <!--lombok start-->
  6. <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
  7. <dependency>
  8. <groupId>org.projectlombok</groupId>
  9. <artifactId>lombok</artifactId>
  10. <version>${lombok.version}</version>
  11. </dependency>
  12. <!--lombok end-->
  13. </dependencies>

@Data

import 及使用

  1. package com.test.invoice.data;
  2. import lombok.Data;
  3. import lombok.experimental.Accessors;
  4. @Data
  5. @Accessors(chain = true)
  6. public class TRbtTestData {
  7. private String name;
  8. private String version;
  9. }

效果

@FieldNameConstants

@FieldNameConstants 在 lombok v1.16.22 中作为实验性功能引入。

@FieldNameConstants 在 lombok v1.18.4 中被重新设计。

lombok.config 选项 lombok.fieldNameConstants.uppercase = true 被添加到 lombok v1.18.8中。

  1. package com.test.model;
  2. import lombok.Data;
  3. import lombok.experimental.FieldNameConstants;
  4. @Data
  5. @FieldNameConstants
  6. public class Student {
  7. private Integer id;
  8. private String name;
  9. public static void main(String[] args) {
  10. System.out.println(Student.Fields.id);
  11. System.out.println(Student.Fields.name);
  12. }
  13. }

输出

  1. id
  2. name

Lombok 常用注解

来源:Lombok常用注解

常用注解 描述
@Data 相当于@Setter + @Getter + @ToString + @EqualsAndHashCode
@Setter @Getter 作用于属性上,自动生成 getter 和 setter方法
@NonNull 判断是否为空,如果为空,则抛出 java.lang.NullPointerException
@Synchronized 作用在方法上,自动添加到同步机制,生成的代码并不是直接锁方法而是锁代码块
@ToString 生成 toString() 方法,该注解有以下多个属性可以进一步设置:
callSuper:是否输出父类的 toString() 方法,默认为false
includeFieldNames:是否包含字段名称,默认为 true
exclude:排除生成 toString() 的字段
@EqualsAndHashCode
@Cleanup 用于确保已分配的资源被释放,自动帮我们调用 close() 方法。比如 IO 的连接关闭。
@SneakyThrows
@NoArgsConstructor 自动生成无参数构造函数。
@AllArgsConstructor 自动生成全参数构造函数。
@Builder
@SuperBuilder -

alibaba.fastjson

介绍

Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。

Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。

Fastjson 源码地址:https://github.com/alibaba/fastjson

Fastjson 中文 Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN

Fastjson 简明教程

pom.xml 配置

  1. <properties>
  2. <fastjson.version>1.2.38</fastjson.version>
  3. </properties>
  4. <dependencies>
  5. <!--Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库-->
  6. <dependency>
  7. <groupId>com.alibaba</groupId>
  8. <artifactId>fastjson</artifactId>
  9. <version>${fastjson.version}</version>
  10. </dependency>
  11. </dependencies>

import 及使用

  1. package com.test.invoice.data;
  2. import com.alibaba.fastjson.annotation.JSONField;
  3. public class TRbtTestData {
  4. @JSONField(name = "name")
  5. private String name;
  6. @JSONField(name = "version")
  7. private String version;
  8. }

Json字符串和类的相互转换

gson

介绍:GsonGoogle 开源的一个 JSON

pom.xml 配置

  1. <properties>
  2. <gson.version>2.8.5</gson.version>
  3. </properties>
  4. <dependencies>
  5. <!-- 用于日志切面中,以 json 格式打印出入参(本来使用阿里的 FASTJSON, 但是对于文件上传的接口,打印参数会报错,换为 Gson) -->
  6. <dependency>
  7. <groupId>com.google.code.gson</groupId>
  8. <artifactId>gson</artifactId>
  9. <version>${gson.version}</version>
  10. </dependency>
  11. </dependencies>

import 及使用

  1. 属性重命名 @SerializedName 注解的使用
  2. GsonBuilder builder = new GsonBuilder();
  3. Gson gson = builder.create();
  4. log.info("请求方法 Get(),请求参数:"+ gson.toJson(data));

Json字符串和类的相互转换

io.jsonwebtoken

介绍

JSON web Token,简称 JWT,本质是一个 token,是一种紧凑的 URL 安全方法(注意是方法,博主刚开始接触一直以为是一种像 shiro 一样的),用于在网络通信的双方之间传递。一般放在 HTTP 的 headers 参数里面的 authorization 里面(这个是可以自己定义放在哪里的,毕竟只是一种验证用户的方式),值的前面加 Bearer 关键字和空格。除此之外,也可以在 url 和 request body 中传递。

JWT/JJWT JSON WEB TOKEN介绍和使用

pom.xml 配置

  1. <properties>
  2. <jjwt.version>0.8.0</jjwt.version>
  3. </properties>
  4. <dependencies>
  5. <dependency>
  6. <groupId>io.jsonwebtoken</groupId>
  7. <artifactId>jjwt</artifactId>
  8. <version>${jjwt.version}</version>
  9. </dependency>
  10. </dependencies>

import 及使用

  1. import io.jsonwebtoken.Jwts;
  2. import io.jsonwebtoken.SignatureAlgorithm;
  3. import io.jsonwebtoken.impl.crypto.MacProvider;
  4. import java.security.Key;
  5. // We need a signing key, so we'll create one just for this example. Usually
  6. // the key would be read from your application configuration instead.
  7. Key key = MacProvider.generateKey();//这里是加密解密的key。
  8. String compactJws = Jwts.builder()//返回的字符串便是我们的jwt串了
  9. .setSubject("Joe")//设置主题
  10. .signWith(SignatureAlgorithm.HS512, key)//设置算法(必须)
  11. .compact();//这个是全部设置完成后拼成jwt串的方法

swagger

介绍

通过注解的形式自动生成API文档,利用它,可以很方便的书写restful API,swagger主要用于展示springfox生成的API文档

pom.xml 配置

  1. <properties>
  2. <swagger.version>2.7.0</swagger.version>
  3. </properties>
  4. <dependencies>
  5. <!--springfox是通过注解的形式自动生成API文档,利用它,可以很方便的书写restful API,swagger主要用于展示springfox生成的API文档-->
  6. <dependency>
  7. <groupId>io.springfox</groupId>
  8. <artifactId>springfox-swagger2</artifactId>
  9. <version>${swagger.version}</version>
  10. </dependency>
  11. </dependencies>

import 及使用

  1. package com.test.invoice.data;
  2. import io.swagger.annotations.ApiModelProperty;
  3. public class TRbtTestData {
  4. @ApiModelProperty("名称")
  5. private String name;
  6. @ApiModelProperty("版本号")
  7. private String version;
  8. }

Swagger Edit

介绍

Swagger是专门用来管理接口一个工具。在开发过程中,接口一直是纷争的聚焦点,能有效管理接口(保存好记录、及时更新、方便查看、接口测试)。会让整个项目开发效率提升很大。

Swagger 官网:http://swagger.io/
Swagger Github:https://github.com/swagger-api
Swagger Editor 在线 demo:http://editor.swagger.io
Swagger UI 在线 demo:http://petstore.swagger.io/

pom.xml 配置

  1. <properties>
  2. <swagger-ui.version>2.7.0</swagger-ui.version>
  3. </properties>
  4. <dependencies>
  5. <dependency>
  6. <groupId>io.springfox</groupId>
  7. <artifactId>springfox-swagger-ui</artifactId>
  8. <version>${swagger-ui.version}</version>
  9. </dependency>
  10. </dependencies>

Google Guava

介绍

Guava 工程包含了若干被 Google 的 Java 项目广泛依赖的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。 所有这些工具每天都在被 Google 的工程师应用在产品服务中。

Google Guava官方教程(中文版)

pom.xml 配置

  1. <properties>
  2. </properties>
  3. <dependencies>
  4. <dependency>
  5. <groupId>com.google.guava</groupId>
  6. <artifactId>guava</artifactId>
  7. <version>23.0</version>
  8. </dependency>
  9. </dependencies>

cn.hutool

介绍

hutool

https://www.xiaoleilu.com/hutool-preface

Hutool是一个Java工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以“甜甜的”。它最初是作者项目中“util”包的一个整理,后来慢慢积累并加入更多非业务相关功能,并广泛学习其它开源项目精髓,经过自己整理修改,最终形成丰富的开源工具集。
Hutool是Hu + tool的自造词,谐音“糊涂”,寓意,追求“万事都作糊涂观,无所谓失,无所谓得”的境界。
Hutool如何改变我们的coding方式
Hutool的目标是使用一个工具方法代替一段复杂代码,从而最大限度的避免“复制粘贴”代码的问题,彻底改变我们写代码的方式。
以计算MD5为例:
【以前】打开百度 -> 搜“Java MD5加密” -> 打开某篇博客-> 复制粘贴 -> 改改好用
【现在】引入Hutool -> SecureUtil.md5()
同样,当我们想实现什么功能,脑袋中第一个想到的就是去找XXXUtil,而非百度。

pom.xml 配置

  1. <properties>
  2. <hutool.version>4.5.1</hutool.version>
  3. </properties>
  4. <dependencies>
  5. <dependency>
  6. <groupId>cn.hutool</groupId>
  7. <artifactId>hutool-all</artifactId>
  8. <version>${hutool.version}</version>
  9. </dependency>
  10. </dependencies>

import 及使用

  1. //字符串转换
  2. int a = 1;
  3. //aStr为"1"
  4. String aStr = Convert.toStr(a);
  5. long[] b = {1,2,3,4,5};
  6. //bStr为:"[1, 2, 3, 4, 5]"
  7. String bStr = Convert.toStr(b);

mybatis-Plus

介绍

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在
MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

MyBatis-Plus

pom.xml 配置

  1. <properties>
  2. <mybatisplus.version>3.1.0</mybatisplus.version>
  3. </properties>
  4. <dependencies>
  5. <!--MyBatis-Plus-->
  6. <dependency>
  7. <groupId>com.baomidou</groupId>
  8. <artifactId>mybatis-plus</artifactId>
  9. <version>${mybatisplus.version}</version>
  10. </dependency>
  11. </dependencies>

import 及使用

  1. import com.baomidou.mybatisplus.annotation.TableId;
  2. import com.baomidou.mybatisplus.extension.activerecord.Model;
  3. @TableId(type = IdType.UUID)
  4. private String id;

dozer

介绍

Dozer 是一个 JavaBean 映射工具库。它支持简单的属性映射,复杂类型映射,双向映射,隐式显式的映射,以及递归映射

pom.xml 配置

  1. <properties>
  2. </properties>
  3. <dependencies>
  4. <!--Dozer是一个JavaBean映射工具库。它支持简单的属性映射,复杂类型映射,双向映射,隐式显式的映射,以及递归映射-->
  5. <dependency>
  6. <groupId>com.github.dozermapper</groupId>
  7. <artifactId>dozer-core</artifactId>
  8. <version>6.1.0</version>
  9. </dependency>
  10. </dependencies>

junit

介绍

JUnit 是一个Java编程语言的单元测试框架

pom.xml 配置

  1. <properties>
  2. </properties>
  3. <dependencies>
  4. <!--JUnit 是一个Java编程语言的单元测试框架-->
  5. <dependency>
  6. <groupId>junit</groupId>
  7. <artifactId>junit</artifactId>
  8. <scope>test</scope>
  9. </dependency>
  10. </dependencies>

bouncy castle

介绍

bouncy castle(轻量级密码术包)是一种用于 Java 平台的开放源码的轻量级密码术包;它支持大量的密码术算法,并提供 JCE 1.2.1 的实现

pom.xml 配置

  1. <properties>
  2. </properties>
  3. <dependencies>
  4. <!--bouncy castle(轻量级密码术包)是一种用于 Java 平台的开放源码的轻量级密码术包;它支持大量的密码术算法,并提供JCE 1.2.1的实现-->
  5. <dependency>
  6. <groupId>org.bouncycastle</groupId>
  7. <artifactId>bcprov-jdk15on</artifactId>
  8. <version>1.55</version>
  9. </dependency>
  10. </dependencies>

spongycastle

介绍

密码加密框架

pom.xml 配置

  1. <properties>
  2. </properties>
  3. <dependencies>
  4. <!--密码加密框架-->
  5. <dependency>
  6. <groupId>com.madgag.spongycastle</groupId>
  7. <artifactId>core</artifactId>
  8. <version>1.54.0.0</version>
  9. </dependency>
  10. </dependencies>

apache.pdfbox

介绍

Apache PDFbox 是一个开源的、基于 Java 的、支持 PDF 文档生成的工具库,它可以用于创建新的 PDF 文档,修改现有的 PDF 文档,还可以从 PDF 文档中提取所需的内容。Apache PDFBox 还包含了数个命令行工具

Apache PDFbox开发指南之PDF文档读取

pom.xml 配置

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.apache.pdfbox</groupId>
  4. <artifactId>pdfbox</artifactId>
  5. <version>2.0.4</version>
  6. </dependency>
  7. </dependencies>

lowagie

介绍

iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。

pom.xml 配置

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.lowagie</groupId>
  4. <artifactId>itext</artifactId>
  5. <version>2.1.7</version>
  6. </dependency>
  7. </dependencies>

HikariCP

介绍

号称性能最好的 JDBC 连接池

http://blog.sqber.com/articles/HikariCP-Simple-Demo.html

pom.xml 配置

  1. <properties>
  2. <HikariCP.version>3.3.1</HikariCP.version>
  3. </properties>
  4. <dependencies>
  5. <dependency>
  6. <groupId>com.zaxxer</groupId>
  7. <artifactId>HikariCP</artifactId>
  8. <version>${HikariCP.version}</version>
  9. </dependency>
  10. </dependencies>

easyexcel

介绍

EasyExcel 是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百 M 的 Excel。
github 地址:https://github.com/alibaba/easyexcel

pom.xml 配置

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>easyexcel</artifactId>
  4. <version>2.0.5</version>
  5. </dependency>

dom4j

DOM4J 是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。

pom.xml 配置

  1. <dependency>
  2. <groupId>dom4j</groupId>
  3. <artifactId>dom4j</artifactId>
  4. <version>1.6.1</version>
  5. </dependency>
  6. <!-- XPath -->
  7. <dependency>
  8. <groupId>jaxen</groupId>
  9. <artifactId>jaxen</artifactId>
  10. <version>1.1.6</version>
  11. </dependency>

使用案例

SpringIOC 容器 Bean 对象实例化模拟

注解库,例如 @Resource 注解

  1. <dependency>
  2. <groupId>javax.annotation</groupId>
  3. <artifactId>javax.annotation-api</artifactId>
  4. <version>1.3.2</version>
  5. </dependency>

定时任务

介绍:Java 如何实现定时任务?

常用定时任务框架

类型 定时任务框架 描述
单机 Timer 单线程,最基础的定时任务实现方式
单机 ScheduledExecutorService ScheduledExecutorService 内部是线程池, 能更合理的利用资源。
单机 Quartz 它支持 cron 表达式。
单机 SpringTask 只需要一个简单的 @Schedule 注解,就能实现定时任务的功能,并且支持 cron 表达式
分布式 XXL-JOB 分布式任务调度平台
开发迅速、学习简单、轻量级、易扩展
分布式 Elastic-Job ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案
分布式 LTS LTS(light-task-scheduler)主要用于解决分布式任务调度问题,
支持实时任务,定时任务和 Cron 任务
分布式 SchedulerX SchedulerX 是阿里中间件自研的基于 Akka 架构(Akka in SchedulerX 2.0)的新一代分布式任务调度平台,
提供定时、任务编排、分布式跑批等功能,具有高可靠、海量任务、秒级调度及可运维等能力。
分布式 Saturn Saturn:一个分布式作业调度平台。
据悉 Saturn 平台已经平稳运行,承载着唯品会核心系统的全部定时任务的调度,监控,配置,经受住了生产环境的各种考验
分布式 PowerJob 全新一代分布式任务调度与计算框架