maven提供了范围

时间:2010-12-27 22:04:14

标签: dependencies maven

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
</dependency>

我在项目的pom.xml中使用了依赖项导入。我的问题是我宣布2.5为版本。但是,编写较低版本是否重要?例如,我的意思是,如果我的项目使用3.0版本,我写的将提供2.5? (我的意思是让我们接受2.5很好,我的项目运行良好,如果我不改变其他任何东西,只需将2.5改为2.0会导致错误吗?)

2 个答案:

答案 0 :(得分:24)

正确的解决方案是将容器中使用的确切servlet api版本声明为未成年人。

关键字提供:您指定的任何版本在编译时使用并进行测试。在运行时,它假定由运行时容器提供,例如码头。

如果实际运行时库与POM中的声明不同,则会引发麻烦。您是否会遇到问题是版本之间兼容性的问题。

Servlet API向后兼容,请参阅: Are the Java Servlet APIs backwards compatible?

答案 1 :(得分:6)

取决于。

一般来说,如果您期望一个确切的版本(即使提供),那么这就是您应该提供的。

但是,有些情况下您可能需要稍微修改一下版本。话虽如此 - 我会争辩2点:

1)您的项目可能期望较低版本并提供更高版本,这可能是正常的; 只要较高版本不是主要版本。我建议看看一个好的开源版本控制模型,比如Apache project

2)让您的项目期望更高版本并获得更低版本可能 NOT 确定。主要原因是你不能指望可能不存在的东西。

我希望这会有所帮助。