如果库使用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(例如3.0)中提供的定义不同的servlet-api依赖(例如2.5)会不会有问题?我假设由于范围提供(并且仅在编译时可用),依赖工具(mvn,gradle ...)将不会在 some_framework 中下载它们,并且它们具有(并且被允许)手动声明依赖。
(是的,我知道3.0和2.5之间的差异,这不是一个问题。我也假设一切都正确编译等等。我只是对maven如何编译 some_framework 感兴趣,哪个依赖:2.5或3?)。
答案 0 :(得分:0)
让我回答我自己的问题,因为[SO]从未帮助过那些棘手的问题:)
我创建了简单的maven项目(将作为 some_framework )。它取决于jodd-servlet
( mylib ),它将servlet 3.0.1列为提供的依赖项。我跑的时候
mvn dependency:resolve
我没有在依赖列表中看到servlet。现在,如果当前项目(即 some_framework )将servlet v2.5列为依赖项;然后,如果我再次运行相同的命令,我看到只依赖于2.5。
因此,我们可以说提供的依赖关系不透明或导出。