Java 罐子的再分配

Java 罐子的再分配,java,jar,dependencies,redistributable,Java,Jar,Dependencies,Redistributable,我目前正在编译web应用程序中使用的第三方库的列表。应用程序部署在tomcat中。我想知道哪些第三方JAR实际上必须或应该包含在发行版中。特别是,我现在想知道如何最好地使用javax库。 例如,我假设javax.annotation-3.1.1.jar可以以某种标准化的方式使用,例如,将其作为扩展下载,而无需我将其包含到我自己的软件版本中。但是,我将它作为jaxws-api的一个可传递依赖项包含在web服务中,因此它包含在应用程序的lib目录中。 我知道我可以使用扩展列表清单条目使目标机器下载并

我目前正在编译web应用程序中使用的第三方库的列表。应用程序部署在tomcat中。我想知道哪些第三方JAR实际上必须或应该包含在发行版中。特别是,我现在想知道如何最好地使用javax库。 例如,我假设javax.annotation-3.1.1.jar可以以某种标准化的方式使用,例如,将其作为扩展下载,而无需我将其包含到我自己的软件版本中。但是,我将它作为jaxws-api的一个可传递依赖项包含在web服务中,因此它包含在应用程序的lib目录中。 我知道我可以使用扩展列表清单条目使目标机器下载并安装这样的JAR。但是,对于同一台机器上可能需要相同库的其他版本的其他应用程序,它们也是可见的

因此,我有一些关于第三方LIB的问题,如果有人能给我一些提示,我将非常高兴:

使用第三方库的最佳实践是什么

javax库是否有一些最佳实践


我是否可以也应该避免重新分发而不给安装应用程序的人员带来沉重负担?

我必须承认,我还不理解“重新分发”的概念,也许您使用的是一些具体的应用程序服务器术语,所以我将试着在这里提供一个常见的答案,假设您有一场战争

WAR(代表Web存档)应包括应用程序使用的所有第三方。 这些文件位于WEB-INF/lib文件夹中

现在,每个javaee服务器都应该“理解”javax库,因为它包含相关的接口。“javax”库通常提供接口,使用这些接口的实现/代码由应用服务器开发人员提供

例如,对于servlets技术,Tomcat(或任何web服务器的名称)将在其内部LIB中包含HttpServlet抽象类,它将扫描您的war并找到您在何处实现/扩展它,这就是它实际识别您的servlets的方式

现在,您不应该在war中包含servlet api jar,因为它已经存在于应用服务器中

如果您使用的是maven之类的构建工具,它们允许构建war,这样一些第三方将用于编译,但不会被打包到war中

我不明白为什么安装应用程序如此困难——在最简单的情况下——你把战争扔到了web服务器上,就是这样


希望这能有所帮助

我确实在使用Maven,并包含了范围为“提供”的servlet api。此外,我还可以在Tomcat的lib文件夹中找到annotations-api.jar以及一些其他jar。然而,这还不包括所有的javax库。例如,jaxws-api不包括在该文件夹中。顺便说一句,安装没有问题。我只是在考虑我必须打包哪些JAR,以及出于许可的原因我可以假设哪些JAR存在。