返回

Maven 打包后 jar 包第三方不可用排查记录

后端

前言

最近在工作中遇到了一个需求:需要编写一个工具类的 JAR 包,然后提供给第三方调用其中的类方法。由于第三方无法共用我们项目的私有仓库,因此需要将 JAR 包发布到 Maven 中央仓库。在打包和发布 JAR 包后,第三方却无法正常使用该 JAR 包。经过排查,发现原因是第三方项目中 classpath 配置不当。本文将详细记录排查过程和解决方案,并提供一份排查清单,帮助开发者快速解决类似问题。

排查过程

  1. 检查 JAR 包是否已发布到 Maven 中央仓库 :通过 Maven Central 搜索,确认 JAR 包已成功发布。
  2. 检查第三方项目是否正确引用了 JAR 包 :在第三方项目的 pom.xml 文件中,确认已正确添加了对 JAR 包的依赖。
  3. 检查第三方项目中的 classpath 配置 :使用命令 mvn dependency:tree 查看第三方项目的 classpath,确认 JAR 包是否已添加到 classpath 中。
  4. 检查第三方项目的 classloader :使用命令 mvn exec:java -Dexec.mainClass=com.example.Main 运行第三方项目,并查看输出日志中是否包含 JAR 包中的类。如果未包含,则表明 classloader 未正确加载 JAR 包。

解决方案

通过以上排查,发现第三方项目中 classpath 配置不当,导致 classloader 无法加载 JAR 包中的类。具体来说,第三方项目在 classpath 中使用了通配符 *,这会导致所有依赖项的 JAR 包都添加到 classpath 中。而我们的 JAR 包与第三方项目中已有的依赖项存在冲突,导致 classloader 无法正确加载 JAR 包。

为了解决此问题,需要修改第三方项目中的 classpath 配置,将 * 替换为具体的依赖项列表。修改后,第三方项目可以正常加载和使用 JAR 包。

排查清单

以下是一份排查第三方项目无法使用 Maven 打包的 JAR 包的清单:

  1. 检查 JAR 包是否已发布到 Maven 中央仓库。
  2. 检查第三方项目是否正确引用了 JAR 包。
  3. 检查第三方项目中的 classpath 配置,确保 JAR 包已添加到 classpath 中。
  4. 检查第三方项目的 classloader,确认 JAR 包中的类是否已加载。
  5. 如果 classloader 未正确加载 JAR 包,检查第三方项目中的 classpath 配置,是否使用了通配符 *,并将其替换为具体的依赖项列表。

总结

通过本文记录的排查过程和解决方案,我们可以帮助开发者快速解决 Maven 打包后,第三方无法使用 JAR 包的问题。同时,本文提供的排查清单可以作为一种通用工具,帮助开发者解决类似问题。