【问题标题】:Redistribution of jars重新分配罐子
【发布时间】:2015-06-07 08:25:48
【问题描述】:

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

所以,我有一些关于 3rd 方库的问题,如果有人能给我一些提示,我会很高兴:

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

javax 库有一些最佳实践吗?

在不给安装应用程序的人带来很大负担的情况下,我可以而且应该避免重新分发吗?

【问题讨论】:

    标签: java jar dependencies redistributable


    【解决方案1】:

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

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

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

    例如对于 servlet 技术,Tomcat(或命名任何 Web 服务器)将在其内部库中包含 HttpServlet 抽象类,它将扫描您的战争并找到您在哪里实现/扩展它,这就是它实际上识别您的 servlet 的方式.

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

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

    我不明白为什么安装应用程序如此困难 - 在最简单的情况下 - 你将战争投入到网络服务器中,就是这样。

    希望对你有帮助

    【讨论】:

    • 我确实在使用 Maven 并包括范围为“提供”的 servlet-api。此外,我可以在 Tomcat 的 lib 文件夹中找到 annotations-api.jar 以及其他一些 jar。然而,这还没有包括所有的 javax 库。例如,该文件夹中不包含 jaxws-api。顺便说一句,安装没问题。我只是在考虑我必须打包哪些罐子,以及出于许可原因我可以假设哪些罐子存在。
    猜你喜欢
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2012-09-03
    相关资源
    最近更新 更多