20 Useful Libraries Java Programmers Should Know
优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库。 我花了很多时间来学习API,尤其是在阅读了《有效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版本错误,则将收到TheClassNotFoundException,NoClassDefFoundError或UnsupportedClassVersionError。
20个有用的Java程序员开源库
这是我收集的一些有用的第三方库,Java开发人员可以在其应用程序中使用它们来完成许多有用的任务。 为了使用这些库,Java开发人员应该对此有所熟悉,这就是本文的重点。 如果您有想法,可以研究该库并加以使用。
1。 记录库
日志记录库很常见,因为在每个项目中都需要它们。 对于服务器端应用程序而言,它们是最重要的事情,因为日志仅放置在您可以看到应用程序运行状况的位置。 即使JDK附带了自己的日志记录库,也有更好的替代方法,例如 Log4j,SLF4j和LogBack。
Java开发人员应该熟悉日志记录库的优缺点,并且知道为什么使用SLF4j比普通的Log4j更好。 如果您不知道为什么,建议您阅读我以前关于同一主题的文章。
2。 JSON解析库
在当今的Web服务和IoT世界中,JSON已成为将信息从客户端传输到服务器的首选协议。 他们已经将XML替换为以平台无关的方式传输信息的最优选方式。
不幸的是,JDK没有JSON库。 但是,有很多不错的第三方库,例如Jackson和Gson,它们都可以让您解析和创建JSON消息。
Java Web开发人员应至少熟悉这些库之一。 如果您想了解有关Jackson和JSON的更多信息,我建议通过Udemy的Java API课程学习JSON。
3。 单元测试库
单元测试是将普通开发人员与优秀开发人员区分开的最重要的事情。 经常为程序员提供不编写单元测试的借口,但是避免单元测试的最常见借口是缺乏流行的单元测试库(包括JUnit,Mockito和PowerMock)的经验和知识。
我的目标是在2018年提高对单元测试和集成测试库的了解,例如JUnit 5,Cucumber,Robot框架等。
我还注册了Udemy的JUnit和Mockito Crash课程。 即使您了解JUnit和单元测试的基础知识,您也可能想要刷新和升级自己的知识。
4。 通用库
Java开发人员可以使用几个不错的通用第三方库,例如Apache Commons和Google Guava。 我总是将这些库包含在我的项目中,因为它们简化了许多任务。
正如约书亚·布洛赫(Joshua Bloch)在"有效Java"中正确说的那样,重新发明轮子毫无意义。 我们应该宁愿使用久经考验的库,也不要时不时编写我们自己的例程。
对于Java开发人员来说,熟悉Google Guava和Apache Commons库是一件好事。
5。 HTTP库
我不喜欢JDK的一件事是他们缺乏对HTTP的支持。 尽管您可以使用
尽管JDK 9带来了HTTP 2.0的支持和对HTTP的更好支持,但我强烈建议所有Java开发人员熟悉流行的HTTP客户端库,包括HttpClient和HttpCore。
您还可以查看这篇文章Java 9的新增功能-模块等,以了解有关JDK 9的HTTP 2支持的更多信息。
6。 XML解析库
有许多XML解析库,包括Xerces,JAXB,JAXP,Dom4j和Xstream。 Xerces2是Apache Xerces系列中的下一代高性能,完全兼容的XML解析器。 Xerces的这个新版本引入了Xerces本机接口(XNI),这是一个用于构建解析器组件和配置的完整框架,该框架非常模块化且易于编程。
Apache Xerces2解析器是XNI的参考实现,但是其他解析器组件,配置和解析器也可以使用Xerces本机接口编写。 Dom4j是另一个适用于Java应用程序的灵活XML框架。 如果您想了解有关Java中XML解析的更多信息,建议您阅读有关Udemy的Java Web服务和XML在线课程。
7。 Excel阅读库
信不信由你–所有现实世界中的应用程序都必须以某种形式与Microsoft Office进行交互。 许多应用程序都需要提供在Excel中导出数据的功能,如果必须从Java应用程序中导出数据,则需要Apache POI API。
这是一个非常丰富的库,可让您从Java程序读取和写入XLS文件。 您可以看到该链接,以获取在核心Java应用程序中读取Excel文件的工作示例。
8。 字节码库
如果您要编写一个框架或库来生成代码或与字节码进行交互,则需要一个字节码库。
它们使您可以读取和修改应用程序生成的字节码。 Java世界中一些流行的字节码库是javassist和Cglib Nodep。
Javassist(JAVA编程ASSISTant)使Java字节码操作非常简单。 它是用于在Java中编辑字节码的类库。 ASM是另一个有用的字节码编辑库。 如果您不熟悉字节码,建议您查看Java程序员简介以了解更多信息。
9。 数据库连接池库
如果要通过Java应用程序与数据库进行交互,但不使用数据库连接池库,那么您将丢失某些内容。
由于在运行时创建数据库连接会花费时间,并使请求处理变慢,因此始终建议使用DB连接库。 最受欢迎的是Commons Pool和DBCP。
在Web应用程序中,它的Web服务器通常提供这些功能,但是在核心Java应用程序中,您需要将这些连接池库包含到类路径中才能使用数据库连接池。
如果您想了解有关Web应用程序中JDBC和连接池的更多信息,建议您阅读Udemy中的JSP,Servlet和JDBC for Beginners课程。
10。 邮件库
与日志记录和数据库连接类似,消息传递也是许多实际Java应用程序的共同特征。
Java提供了JMS或Java消息服务,它不是JDK的一部分。 对于此组件,您需要包括一个单独的
同样,如果使用的是第三方消息传递协议(例如Tibco RV),则需要在应用程序类路径中使用第三方JAR(
11。 PDF库
与Microsoft Excel相似,PDF库是另一种普遍存在的格式。 如果需要在应用程序中支持PDF功能,例如导出PDF文件中的数据,则可以使用iText和Apache FOP库。
两者都提供有用的PDF相关功能,但iText变得越来越丰富。 请参阅此处以了解有关iText的更多信息。
12。 日期和时间库
在Java 8之前,JDK的数据和时间库存在许多缺陷,因为它们不是线程安全的,不可变的并且不易出错。 许多Java开发人员都依靠JodaTime来实现其日期和时间要求。
从JDK 8开始,没有理由使用Joda,因为您可以从JDK 8的新日期和时间API中获得所有功能,但是如果您使用的是较旧的Java版本,则JodaTime是一个值得学习的库。
如果您想了解有关新日期和时间API的更多信息,建议您查看有关Udemy的Java 8新增功能课程。 它很好地概述了Java 8的所有重要功能,包括日期和时间API。
13。 馆藏图书馆
尽管JDK具有丰富的集合库,但仍有一些第三方库提供了更多选项,例如Apache Commons集合,Goldman Sachs集合,Google集合和Trove。
Trove库特别有用,因为它为Java提供了高速的常规和原始集合。
FastUtil是另一个类似的API。 它通过提供特定类型的映射,集合,列表和优先级队列来扩展Java Collections Framework,该队列具有较小的内存占用,快速的访问和插入。 它还提供了大型(64位)数组,集合和列表,并为二进制文件和文本文件提供了快速,实用的I / O类。
14。 电子邮件API
javax.mail和Apache Commons Email都提供了用于从Java发送电子邮件的API。 它建立在旨在简化的JavaMail API之上。
15。 HTML解析库
与JSON和XML相似,HTML是我们许多人必须处理的另一种常见格式。 值得庆幸的是,我们拥有JSoup,它大大简化了Java应用程序中HTML的使用。
您可以使用JSoup不仅解析HTML,还可以创建HTML文档
它提供了使用DOM,CSS和类似jquery的最佳方法来提取和处理数据的非常方便的API。JSo实现了WHATWG HTML5规范,并将HTML解析为相同的DOM,就像现代浏览器一样。
16。密码库
Apache Commons Codec软件包包含用于各种格式(例如Base64和Hexadecimal)的简单编码器和解码器。
除了这些广泛使用的编码器和解码器之外,编解码器包还维护了语音编码实用程序的集合。
17。 嵌入式SQL数据库库
我真的很喜欢H2这样的内存数据库,您可以将其嵌入Java应用程序中。 它们非常适合测试SQL脚本和运行需要数据库的单元测试。 但是,H2不是唯一的数据库,您也可以选择Apache Derby和HSQL。
18。 JDBC故障排除库
有一些不错的JDBC扩展库,可以使调试更容易,例如P6spy。
这是一个库,可在不更改应用程序代码的情况下无缝地拦截和记录数据库数据。 您可以使用它们来记录SQL查询及其时间。
例如,如果您在代码中使用PreparedStatment和CallableStatement,则这些库可以记录带有参数的确切调用以及执行所需的时间。
如果您想了解有关JDBC的更多信息,可以查看JDBC for Beginners。
19。 序列化库
Google协议缓冲区是一种以有效但可扩展的格式对结构化数据进行编码的方法。 它是Java序列化的一种更丰富,更好的选择。 我强烈建议经验丰富的Java开发人员学习Google Protobuf。 您可以查看本文以了解有关Google协议缓冲区的更多信息。
20。 网络图书馆
一些有用的网络库是Netty和Apache MINA。 如果您在编写需要执行低级网络任务的应用程序,请考虑使用这些库。 如果要了解有关Java中网络编程的更多信息,请查看Java网络编程-TCP / IP套接字编程。
到此为止,每个Java开发人员都应该使用一些有用的库。 Java领域非常广泛,您会发现大量用于执行不同操作的库。
如果您想用Java做任何事情,您将找到一个有关如何做到这一点的库。 与往常一样,Google是您找到有用的Java库的最佳朋友,但是您也可以查看Maven中央存储库,以找到一些适合您手头任务的有用库。