我正在构建一个可以在其他项目中使用的JPA库。发布相同的最佳方法是什么?我应该发布一个包含所有依赖项的胖jar还是只发布类?
请建议使用构建插件来构建和发布常用实用程序或库
答案 0 :(得分:0)
简短: 从来没有像肥胖的罐子那样发布任何东西。您的库应该有一个pom文件,声明您的库编译/运行时依赖项。发布JPA或任何其他库类型没有区别。所以只需使用默认的Maven / Gradle发布机制
更长的时间: 项目的pom文件应该列出库所需的运行时依赖项,因此当另一个项目将jar文件作为依赖项包含时,它们会自动获得传递依赖项。 这和胖罐之间有一个至关重要的区别。如果您的库需要Guava版本16,并且您将其包含在已经使用Guava版本20的另一个项目中,则Maven / Gradle允许您选择要使用的版本(或者您可以同时使用这两个版本,但这是一个坏主意)。当你开始在你的jar中包含其他人的代码时,你会失去这个可能性,因为你的胖jar包含你在构建库时确定的特定版本的第三方库。我见过几个MethodNotFoundError,因为有人在另一个jar中包含了旧版本的库。在开发过程中,这可能会起作用,因为你也有新版本的库,它首先在类路径中,但在运行时胖胖jar可能是第一个,并且该类的旧版本遮蔽了较新的版本。
重要的是要了解当JVM从文件夹加载jar文件时,例如在webapp(WEB-INF / lib)中,你无法控制类路径中jar文件的顺序,这就是为什么要使用胖罐或者同一个库的多个版本是一个非常糟糕的主意。甚至有可能两台机器可以按不同的顺序读取相同的文件夹内容,因为默认的排序顺序取决于文件系统。
祝你好运