2013-10-07 36 views
0

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

所以,我对第三方库的一些问题,我将非常高兴,如果有人可以给我一些提示:

什么是使用第三方库的最佳做法?

javax-libraries是否有一些最佳实践?

可以并且应该避免重新分配而不会给安装应用程序的人造成很大负担?

回答

0

我不得不承认,在这里我还没有理解“重新分配”的概念,也许你正在使用一些具体的应用服务器术语,所以我会尽量在这里提供一个共同的答案,假设你有一场战争。

WAR(代表Web Archive)应包含应用程序使用的所有第三方。 这些驻留在WEB-INF/lib文件夹中。

现在,每个Java EE服务器都应该“理解”javax库,因为它包含相关的接口。 “javax”库通常提供接口,而与这些接口配合使用的实现/代码由应用服务器开发人员提供。例如,对于Servlet技术,Tomcat(或任何Web服务器的名称)将在其内部库中包含HttpServlet抽象类,它将扫描您的战争并找到您在哪里实现/扩展它,这是它如何识别您的servlet其实。

现在,您不应该将servlet-api jar包含到您的战争中,因为它已经存在于应用程序服务器中。

如果你使用像maven这样的构建工具,他们允许构建你的战争,这样一些第三方将被用于编译,但不会被打包成战争。

我不明白为什么安装该应用程序非常困难 - 在最简单的情况下 - 您将战争引入Web服务器,就是这样。

希望这会有所帮助

+0

我的确在使用Maven,并且包含servlet-api和作用域“provided”。另外,我可以在Tomcat的lib文件夹中找到Annotations-api.jar以及其他一些jar文件。但是,这到目前为止还没有包含所有的javax库。例如,jaxws-api不包含在该文件夹中。安装,顺便说一句,没问题。我只考虑我必须打包哪些罐子,以及哪些罐子可以出于许可原因而出现。 – avidD