20个对Java程序员有用的开源库

优秀且经验丰富的Java开发人员的特点之一是对API的广泛了解,包括JDK和第三方库。我花了大量的时间学习API,特别是在阅读了 Effective Java 3rd Edition之后,约书亚·布洛赫(Joshua Bloch)建议如何使用现有的API进行开发,而不是为普通的东西编写新的代码。

在本文中,我将分享一些Java开发人员应该熟悉的最有用、最重要的库和api。然而,不包括例如Spring和Hibernate框架。

通常,我将为日常项目包括有用的库,包括Log4j之类的日志库、Jackson之类的JSON解析库,以及JUnit和Mockito之类的单元测试api。如果您需要在项目中使用它们,那么,您可以在项目的类路径中包含这些库的jar来开始使用它们,或者可以使用Maven进行依赖管理。

当您使用Maven进行依赖管理时,它将自动下载这些库,包括它们所依赖的库,称为传递依赖。

例如,如果下载Spring框架,它还将下载Spring依赖的所有其他jar,例如Log4j。

您可能没有意识到,但是拥有合适的依赖jar是一件令人头疼的事情。如果您有错误的JAR版本,那么您将获得ClassNotFoundException、NoClassDefFoundError或UnsupportedClassVersionError等。

下面是我收集的一些有用的第三方库,Java开发人员可以在他们的应用程序中使用它们来执行许多有用的任务。为了使用这些库,Java开发人员应该熟悉它们,这就是本文的重点。如果你有一个新需求,你可以研究决定使用哪个类库。

1.日志库

日志库非常常见,因为在每个项目中都需要它们。对于服务器端应用程序来说,日志是最重要的,因为日志只放在您可以看到应用程序上发生了什么事情的地方。尽管JDK附带了自己的日志库,但是还有更好的选择,例如Log4j、SLF4j和LogBack。

Java开发人员应该熟悉日志库的优缺点,知道为什么使用SLF4j比使用普通的Log4j要好。

2.JSON解析库

在当今的web服务和物联网世界中,JSON已成为将信息从客户机传输到服务器的首选协议。它们已经取代了XML,成为以独立于平台的方式传输信息的最理想方式。

不幸的是,JDK没有JSON库。但是,有许多优秀的第三方库允许您解析和创建JSON消息,如Jackson和Gson。

Java web开发人员应该至少熟悉其中一个库。

3. 单元测试类库

单元测试是区分普通开发人员和优秀开发人员的最重要的一点。程序员经常会得到不编写单元测试的借口,但是避免单元测试的最常见借口是缺乏流行的单元测试库的经验和知识,包括JUnit、Mockito和PowerMock。

我的目标是在2018年提高单元测试和集成测试库的知识,比如JUnit 5、Cucumber、Robot framework等等。

4. 通用类库

Java开发人员可以使用一些好的、通用的第三方库,比如Apache Commons和谷歌Guava。我总是在我的项目中包含这些库,因为它们简化了很多任务。

正如约书亚·布洛赫(Joshua Bloch)在《有效Java》(Effective Java)一书中所言,没有必要重新发明轮子。我们应该更喜欢使用经过测试的库,而不是时不时地编写我们自己的例程。

对于Java开发人员来说,熟悉Google Guava 和Apache Commons库是很有帮助的。

5. HTTP Libraries

我不喜欢JDK的一点是它不支持HTTP。虽然可以使用java.netpackage中的类建立HTTP连接,但是使用开源、第三方库(如Apache HttpClient和HttpCore)并不容易,也不无缝。

尽管JDK 9支持HTTP 2.0和更好地支持HTTP,但我强烈建议所有Java开发人员熟悉流行的HTTP客户机库,包括HttpClient和HttpCore。

6.XML 解析类库

有许多XML解析库,包括Xerces、JAXB、JAXP、Dom4j和Xstream。Xerces2是Apache Xerces家族中的下一代高性能、完全兼容的XML解析器。Xerces的新版本引入了Xerces本机接口(XNI),这是构建解析器组件和配置的完整框架,非常模块化,易于编程。

Apache Xerces2解析器是XNI的引用实现,但是其他解析器组件、配置和解析器可以使用Xerces本机接口编写。Dom4j是Java应用程序的另一个灵活的XML框架。

7. Excel 读写处理 库

不管你信不信,实际应用中的所有应用程序都必须以某种形式与Microsoft Office交互。许多应用程序需要提供在Excel中导出数据的功能,如果需要从Java应用程序中导出数据,则需要使用Apache POI API。这是一个非常丰富的库,允许您从Java程序中读写XLS文件。

8. Bytecode Libraries

如果您正在编写生成代码或与字节码交互的框架或库,那么您需要一个bytecode库。

它们允许您读取和修改应用程序生成的bytecode码。Java世界中流行的bytecode码库是javassist和Cglib Nodep。

9.数据库连接池 Libraries

如果您是从Java应用程序中与数据库交互,而不是使用数据库连接池库,那么您就错过了一些东西。

由于在运行时创建数据库连接需要时间,并且请求处理速度较慢,所以建议使用DB连接库。一些流行的共享池和DBCP。

在web应用程序中,web服务器通常提供这些功能,但是在核心Java应用程序中,您需要将这些连接池库包含到类路径中,以使用数据库连接池。

10. Messaging Libraries

与日志记录和数据库连接类似,消息传递也是许多实际Java应用程序的共同特性。

Java提供了JMS或Java消息传递服务,这不是JDK的一部分。对于这个组件,您需要包含一个单独的jms.jar。

类似地,如果您使用第三方消息传递协议,如Tibco RV,则需要在应用程序类路径中引用第三方JAR - tibrv.jar .

11. PDF 类库

与Microsoft Excel类似,PDF库是另一种无处不在的格式。如果需要在应用程序中支持PDF功能,比如在PDF文件中导出数据,可以使用iText和Apache FOP库。

两者都提供了有用的PDF相关功能,但iText更丰富、更好。

12.日期和时间相关库

在Java 8之前,JDK的数据和时间库有很多缺陷,因为它们不是线程安全的、不可变的和容易出错的。许多Java开发人员依赖JodaTime实现他们的日期和时间需求。

从JDK 8开始,没有理由再继续去使用Joda,因为您在JDK 8的新日期和时间API中可以使用所有这些功能,但是如果您使用的是旧的Java版本,那么JodaTime是一个值得学习的库。

如果您想了解更多关于新的日期和时间API的信息,我建议您去搜索引擎查找Java 8课程的最新内容。它很好地概述了Java 8的所有重要特性,包括日期和时间API。

13. 集合类库

尽管JDK有一个丰富的集合库,但是有一些第三方库提供了更多的选项,比如Apache Commons collections、Goldman Sachs collections、谷歌collections和collections。

Trove library特别有用,因为它为Java提供了高速的常规和原始集合。

FastUtil是另一个类似的API。它通过提供特定于类型的映射、集合、列表和优先级队列来扩展Java集合框架,并且具有较小的内存占用、快速访问和插入;它还为二进制文件和文本文件提供了大型(64位)数组、集和列表,并提供了快速、实用的I/O类。

14. Email APIs 库

javax.mail和Apache Commons电子邮件都提供了一个API,用于从Java发送电子邮件。它构建在JavaMail API之上,目的是方便使用。

15. HTML Parsing 库

与JSON和XML类似,HTML是我们许多人不得不处理的另一种常见文档格式。谢天谢地,我们有了JSoup,它极大地简化了在Java应用程序中使用HTML的工作。

使用JSoup,您不仅可以解析HTML,还可以创建HTML格式文档

16.Cryptographic 库

Apache Commons Codec包包含简单的编码器和各种格式的解码器,如Base64和十六进制。

除了这些广泛使用的编码器和解码器之外,编码器包还维护语音编码实用程序的集合。

17. 嵌入式SQL数据库库

我非常喜欢内存中的数据库,比如H2,您可以将它嵌入到Java应用程序中。它们非常适合测试SQL脚本和运行需要数据库的单元测试。然而,除了H2数据库之外,您还可以选择Apache Derby和HSQL。

J18.DBC故障诊断库

有一些好的扩展JDBC库可以使调试更容易,比如P6spy。

这是一个库,可以无缝地拦截和记录数据库数据,而无需对应用程序进行代码更改。您可以使用它们来记录SQL查询及其时间。

例如,如果在代码中使用PreparedStatment和CallableStatement,这些库可以使用参数记录精确的调用,以及执行所需的时间。

19. 序列化类库

谷歌Google Protocol Buffers是一种以高效但可扩展的格式编码结构化数据的方法。它比Java序列化更丰富、更好。我强烈推荐有经验的Java开发人员学习谷歌Protobuf。

20. 网络相关类库

一些有用的网络库是Netty和Apache MINA。如果您正在编写一个应用程序,需要执行低级网络任务,请考虑使用这些库。如果您想了解更多关于Java网络编程的知识,请参考Java网络编程——TCP/IP套接字编程( Java Network Programming - TCP/IP Socket Programming)。

以上就是所有Java开发人员都应该使用的一些常用的类库。Java应用领域是非常广泛的,您能找到大量的库用于处理不同的需求。

如果您想在Java中做任何事情,那么您很可能会找到一个类库来满足的你的需求。与往常一样,搜索引擎是您寻找有用Java库的最佳朋友,但您也可以查看Maven中央存储库,以找到与手头任务相关的一些有用库。

原文发布于微信公众号 - 程序你好(codinghello)

原文发表时间:2018-07-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SeanCheney的专栏

爬虫框架整理汇总

53760
来自专栏MelonTeam专栏

[译]Android Instant Apps简介

导语 : Google最近发布了Instant Apps,可以帮助开发者进一步的增强Android的原生App体验。Instant Apps旨在通过在需要时只下...

42070
来自专栏美团技术团队

Android Binder漏洞挖掘技术与案例分享

本文由作者根据其在KCon 2016黑客大会上的演讲内容整理而成。演讲稿链接:Binder fuzzing based on drozer。 文章开始,先来看几...

55770
来自专栏菩提树下的杨过

纯手工搭建JSF开发环境(JSF2.2+maven+weblogic 12c/jboss EAP 6.1+)

JSF 2.X因为种种原因(我个人觉得主要是因为推出太晚),再加上EJB2之前的设计过于复杂,引起很多开发人员对官方解决方案的反感,即使EJB3后来做了大量改进...

15410
来自专栏云端架构

【云端架构】网站运维之CDN链接鉴权示例入门(PHP)

链接时间戳格式和有效时间与鉴权KEY 要求跟腾讯云CDN链接鉴权 配置保持同步,服务器以CDN节点配置为基准。以上模板可以根据需要调整,但请不要过度依赖模板,努...

982120
来自专栏Linyb极客之路

工作流引擎之Activiti使用总结

在第一家公司工作的时候主要任务就是开发OA系统,当然基本都是有工作流的支持,不过当时使用的工作流引擎是公司一些牛人开发的(据说是用一个开源的引擎修改的),名称叫...

79140
来自专栏SpringBoot 核心技术

SpringCloud组件:Eureka服务注册中心的失效剔除与自我保护机制

Eureka作为一个成熟的服务注册中心当然也有合理的内部维护服务节点的机制,比如我们本章将要讲解到的服务下线、失效剔除、自我保护,也正是因为内部有这种维护机制才...

2.9K20
来自专栏IT技术精选文摘

Netty高性能之道

1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K...

40370
来自专栏即时通讯技术

新手入门:目前为止最透彻的的Netty高性能原理和框架架构解析

Netty 是一个广受欢迎的异步事件驱动的Java开源网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。

3.2K30
来自专栏张善友的专栏

支持Visual Studio 2008和.NET 3.5的企业类库4.0

企业类库4.0(EntLib 4)发布了,采用的是Microsoft Public License (Ms-PL)协议发布,和之前的版本的相比较更开放,微软的各...

18690

扫码关注云+社区

领取腾讯云代金券