0

如果一个库使用 v3.0.1声明提供了对例如servlet-api 的依赖;用户是否可以将 2.5 版用于他们的库,将用于第三方 Web 应用程序?

换句话说:

mylib (srv 3.0.1)  <-- some_framework(srv 2.5)  <--  user_webapp (tomcat 6 or 7)

此外: v2.5 被声明为javax.servlet:servlet-api:2.5和 v3.0.1 版本被声明为javax.servlet:javax.servlet-api:3.0.1,所以有区别。

some_framework指定与 mylib 中提供的不同的 servlet-api 依赖项(例如 2.5)(例如 3.0)会不会有问题?我假设由于提供了范围(并且仅在编译时可用),依赖工具(mvn,gradle ...)不会在some_framework中下载它,并且它们已经(并且被允许)手动声明依赖关系。

(是的,我知道 3.0 和 2.5 之间的差异,这不是问题。我还假设一切都正确编译,等等。我只是感兴趣 maven 将如何编译some_framework,依赖于:2.5 还是 3?)。

4

1 回答 1

0

让我回答我自己的问题,因为 [SO] 从来没有帮助解决棘手的问题:)

我创建了简单的 Maven 项目(将充当some_framework)。它依赖于jodd-servletmylib),它将 servlet 3.0.1 列为提供的依赖项。当我跑

mvn dependency:resolve

我在依赖项列表中没有看到 servlet。现在,如果当前项目(即some_framework)将 servlet v2.5 列为依赖项;然后如果我再次运行相同的命令,我只会看到对 2.5 的依赖。

因此,我们可以说提供的依赖项不是透明的或导出的。

于 2013-05-14T21:29:56.533 回答