前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >20个对Java程序员有用的开源库

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

作者头像
程序你好
发布2018-08-01 09:28:49
1.1K0
发布2018-08-01 09:28:49
举报
文章被收录于专栏:程序你好程序你好

优秀且经验丰富的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中央存储库,以找到与手头任务相关的一些有用库。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.日志库
  • 2.JSON解析库
  • 3. 单元测试类库
  • 4. 通用类库
  • 5. HTTP Libraries
  • 6.XML 解析类库
  • 7. Excel 读写处理 库
  • 8. Bytecode Libraries
  • 9.数据库连接池 Libraries
  • 10. Messaging Libraries
  • 11. PDF 类库
  • 12.日期和时间相关库
  • 13. 集合类库
  • 14. Email APIs 库
  • 15. HTML Parsing 库
  • 16.Cryptographic 库
  • 17. 嵌入式SQL数据库库
  • J18.DBC故障诊断库
  • 19. 序列化类库
  • 20. 网络相关类库
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档