我目前正在编译Web应用程序中使用的第三方库列表。该应用程序部署在tomcat中。我想知道哪个第三方罐子实际上必须或应该包含在分销中。特别是,我目前想知道如何最好地使用javax库。 例如,我认为javax.annotation-3.1.1.jar可以以某种标准化的方式使用,例如,将其作为扩展名下载,而不将其包括在我自己的软件分发中。但是,我将它作为jaxws-api的传递依赖包含在Web服务中,因此它包含在应用程序的lib目录中。 我知道我可以使用Extension-List清单条目来使目标机器下载并安装这样的jar。但是,它们对于同一台机器上的其他应用程序也是可见的,这可能需要相同库的其他版本。
所以,我对第三方库有一些疑问,如果有人能给我一些提示,我会很高兴:
使用第三方库的最佳做法是什么?
javax-libraries是否有一些最佳实践?
我可以而且应该避免重新分发而不会给安装应用程序的人造成沉重的负担吗?
答案 0 :(得分:0)
我不得不承认,我还没有理解“再分发”这个概念,也许你正在使用一些具体的应用服务器术语,所以我会尝试在这里提供一个共同的答案,假设你有一场战争。
WAR(代表Web Archive)应包括应用程序使用的所有第三方。 它们位于WEB-INF / lib文件夹中。
现在,每个Java EE服务器都应该“理解”javax库,因为它包含相关的接口。 “javax”库通常提供接口,应用服务器开发人员提供与这些接口一起使用的实现/代码。
例如对于servlet技术,Tomcat(或任何web服务器的名称)将在其内部库中包含HttpServlet抽象类,它将扫描你的战争并找到你在哪里实现/扩展它,这就是它如何识别你的servlet
现在,你不应该在你的战争中包含servlet-api jar,因为它已经存在于应用服务器中。
如果您正在使用像maven这样的构建工具,它们可以构建您的战争,以便某些第三方将用于编译,但不会被打包进入战争。
我不明白为什么安装应用程序如此困难 - 在最简单的情况下 - 你把战争扔进了网络服务器就是这样。
希望这有帮助