总的来说, 我在日常项目包含了有用的库, 包括 Log4j 日志库, Jackson JSON 解析库, 以及 JUnit 和 Mockito 等单元测试 API. 如果需要在项目中使用, 则在项目的 classpath 包含这些 JAR, 也可以使用 Maven 进行依赖管理.
当你使用 Maven 进行依赖管理时, 它会自动下载这些库, 包括它们所依赖的库, 称为传递依赖.
例如, 如果你下载 Spring Framework, 它还将下载 Spring 所依赖的所有其他 JAR, 例如 Log4j.
你可能没注意到, 但有正确版本的 JAR 是一个令人头疼的问题. 如果是错误的 JAR 版本, 那么你将遇到 ClassNotFoundException, NoClassDefFoundError 或 UnsupportedClassVersionError
Java 程序员 20 个有用的开源库
这是我收集的一些有用的第三方库, Java 开发可以使用它们在应用中来完成许多有用的功能. 要使用这些库, Java 开发人员应该熟悉它, 这就是本文的重点. 如果你觉得有用, 你可以研究该库并使用它.
1. 日志库
日志库非常常见, 因为在每个项目中都需要它们. 它们是服务器端应用最重要的东西, 因为日志只放在可以看到应用程序当前运行时情况的地方. 尽管 JDK 附带了自己的日志库, 但还有更好的替代方案, 例如 Log4j,SLF4j 和 LogBack.
Java 开发人员应该熟悉日志库的优缺点, 并且知道 为什么使用 SLF4j 比普通 Log4j 更好
2. JSON 解析库
在当今的 web 服务和物联网领域, JSON 已成为将信息从客户端传送到服务器的首选协议. 他们已经替换 xml 成为在独立平台间传输信息的最佳方式.
遗憾的是, JDK 没有 JSON 库. 但是, 有许多优秀的第三方库允许你解析和创建 JSON 消息, 如 Jackson 和 Gson.
Java Web 开发人员应该熟悉这些库中的至少一个. 如果你想了解有关 Jackson 和 JSON 的更多信息, 我建议你看看 Udemy 的课程 JSON with the Java API
3. 单元测试库
单元测试是将普通开发人员与优秀开发人员区分开来的最重要的事情. 程序员经常有理由不写单元测试, 但逃避写单元测试的最常见的借口是缺乏常用单元测试库的经验和知识, 包括 JUnit,Mockito 和 PowerMock.
我在 2018 年有一个目标就是提高我对单元测试和集成测试库的了解, 比如 JUnit 5,Cucumber,Robot 框架和一些其他的.
我还在 Udemy 注册了 JUnit and Mockito Crash Course . 即使你了解 JUnit 和单元测试的基础知识, 可能也希望更新并进阶自己的知识.
4. 通用库
Java 开发人员可以使用几个很好的通用第三方库, 比如 Apache Commons 和 Google Guava. 我总是在我的项目中包含这些库, 因为它们简化了很多功能.
正如 Joshua Bloch 在 Effective Java 中所说的那样, 重复造轮子是没有意义的. 我们应该更偏向于使用久经考验的库而不是时不时自己来实现.
对 Java 开发人员来说, 熟悉 Google Guava 和 Apache Commons 库是件好事.
5. HTTP 库
我不喜欢 JDK 的一点是他们对 HTTP 支持的缺乏. 虽然你可以使用 java.NET 包中的类建立 HTTP 连接 , 但使用开源的第三方库 (如 Apache HttpClient 和 HttpCore) 并不容易或不能无缝结合.
虽然 JDK 9 带来了 HTTP 2.0 的支持和更好的 HTTP 支持, 但我强烈建议所有 Java 开发人员熟悉流行的 HTTP 客户端库, 包括 HttpClient 和 HttpCore.
你还可以查看此文章 What's New in Java 9 - Modules and More 以了解有关 JDK 9 对 HTTP 2 支持的更多信息.
6. xml 解析库
有许多 xml 解析库, 包括 Xerces,JAXB,JAXP,Dom4j 和 Xstream.Xerces2 是 Apache Xerces 下一高性能版本, 完全兼容的 xml 解析器. 这个新版本的 Xerces 引入了 Xerces Native Interface(XNI), 这是一个完整的框架, 用于构建非常模块化且易于编程的解析器组件和配置.
Apache Xerces2 解析器是 XNI 的参考实现, 但是其他解析器组件, 配置和解析器可以使用 Xerces Native Interface 编写. Dom4j 是另一个适用于 Java 应用程序的灵活 xml 框架. 如果你想了解有关 Java 中 xml 解析的更多信息, 建议你查看 Udemy 上的 Java Web Services and xml 在线课程.
7. Excel 库
信不信由你 - 所有现实世界的应用程序都必须以某种形式与 Microsoft Office 进行交互. 许多应用程序需要提供在 Excel 中导出数据的功能, 如果必须从 Java 应用程序执行相同操作, 则需要 Apache POI API.
这是一个非常丰富的库, 允许你 从 Java 程序读取和写入 XLS 文件. 你可以看到该链接(http://www.java67.com/2014/09/how-to-read-write-xlsx-file-in-java-apache-poi-example.html), 以获取在核心 Java 应用程序中读取 Excel 文件的工作示例.
8. 字节码库
如果你正在编写生成代码或与字节码交互的框架, 那么你需要一个字节码库.
它们允许你读取和修改应用程序生成的字节码. Java 世界中一些流行的字节码库是 javassist 和 Cglib Nodep.
Javassist(Java programming assistant)使 Java 字节码操作变得非常简单. 它是一个用于在 Java 中编辑字节码的类库. ASM 是另一个有用的字节码编辑库. 如果你不熟悉字节码, 我建议你查看 Introduction to Java Programmers 以了解有关它的更多信息.
9. 数据库连接池库
如果你正在从 Java 应用程序与数据库交互但不使用数据库连接池库, 那么你将丢失一些内容.
由于在运行时创建数据库连接需要花费时间并使请求处理速度变慢, 因此始终建议使用数据库连接库. 一些流行的是 Commons Pool 和 DBCP.
在 Web 应用程序中, 它的 Web 服务器通常提供这些功能, 但在核心 Java 应用程序中, 你需要将这些连接池库包含在类路径中以使用数据库连接池.
如果你想了解有关 JDBC 和 Web 应用程序中的连接池的更多信息, 我建议你查看 Udemy 中的 JSP, Servlet, and JDBC for Beginners 课程.
10. 消息传递库
与日志记录和数据库连接类似, 消息传递也是许多现实世界 Java 应用程序的常见功能.
Java 提供的 JMS,Java Messaging Service 不属于 JDK. 对于此组件, 你需要包含一个单独的组件 jms.jar.
同样, 如果你正在使用第三方消息传递协议(如 Tibco RV), 则需要使用第三方 JAR tibrv.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 上的 What's new in Java 8 课程. 它提供了 Java 8 所有重要功能的精彩概述, 包括日期和时间 API.
13.Collection 库
尽管 JDK 拥有丰富的集合库, 但仍有一些第三方库提供了更多选项, 例如 Apache Commons 集合, Goldman Sachs 集合, Google 集合和 Trove.
Trove 库特别有用, 因为它为 Java 提供了高速的常规和原始集合.
FastUtil 是另一个类似的 API. 它通过提供特定类型的映射, 集合, 列表和优先级队列来扩展 Java 集合框架, 较小的内存占用, 快速访问和插入; 它还提供大型 (64 位) 数组, 集和列表, 以及用于二进制和文本文件快速实用的 I / O 类.
14.Email API
javax.mail 和 Apache Commons Email 都提供了一个用于从 Java 发送电子邮件的 API . 它建立在 JavaMail API 的基础之上, 旨在简化它.
15. HTML 解析库
与 JSON 和 xml 类似, HMTL 是我们许多人必须处理的另一种常见格式. 值得庆幸的是, 我们有 JSoup, 它极大地简化了在 Java 应用程序中使用 HTML 的过程.
你不仅可以使用 JSoup 解析 HTML, 还可以创建 HTML 文档
它提供了一个非常方便的 API, 用于提取和操作数据, 使用 DOM,CSS 和类似 jQuery 的方法. JSoup 实现了 WHATWG HTML5 规范, 并将 HTML 解析到同一个 DOM, 就像现代浏览器一样.
16.Cryptographic 库
Apache Commons Codec 软件包包含各种格式的简单编码器和解码器, 如 Base64 和 Hexadecimal.
除了这些广泛使用的编码器和解码器之外, 编解码器包还维护一组语音编码实用程序.
17.Embedded SQL Database 库
我真的很喜欢像 H2 这样的内存数据库, 你可以将它嵌入你的 Java 应用程序中. 它们非常适合测试 SQL 脚本和运行需要数据库的单元测试. 但是, H2 并不是唯一的 DB, 你也可以选择 Apache Derby 和 HSQL.
18. JDBC 问题排查库
存在一些很好的 JDBC 扩展库, 可以使调试更容易, 比如 P6spy.
这是一个库, 可以无缝地拦截和记录数据库数据, 而无需对应用程序进行代码更改. 你可以使用它们来记录 SQL 查询及其计时.
例如, 如果你在代码中使用 PreparedStatment 和 CallableStatement, 则这些库可以记录一次完全调用的参数和执行所花费的时间.
如果你想了解有关 JDBC 的更多信息, 可以查看 JDBC for Beginners.
19. 序列化库
Google Protocol Buffers 是一种以高效可扩展的格式编码结构化数据的方法. 它是 Java 序列化的更丰富, 更好的替代品. 我强烈建议有经验的 Java 开发人员学习 Google Protobuf. 你可以查看此文章以了解有关 Google 协议缓冲区的更多信息 .
20. 网络库
一些有用的网络库是 Netty 和 Apache MINA. 如果你正在编写需要执行底层网络任务的应用程序, 请考虑使用这些库. 如果你想了解有关 Java 网络编程的更多信息, 请查看 Java Network Programming - TCP/IP Socket Programming.
这些就是对于每个 Java 开发人员都应该使用的一些 * 有用的库. Java 的世界是浩瀚无穷的, 你会发现数不胜数的库用于做不同的事情.
如果你想用 Java 做任何事情, 很可能你会找到一个如何实现的库. 与往常一样, Google 是你找到有用的 Java 库的最好朋友, 但你也可以查看 Maven 中央存储库, 找到适合你手头任务的一些有用的库.
来源: http://os.51cto.com/art/201907/599871.htm