【问题标题】:maven provided scopemaven 提供范围
【发布时间】:2011-05-31 08:08:37
【问题描述】:
<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 会导致错误吗?)

【问题讨论】:

    标签: dependencies maven


    【解决方案1】:

    视情况而定。

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

    但是,在某些情况下,您可能需要稍微调整版本。话虽如此 - 我会争辩 2 点:

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

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

    我希望这会有所帮助。

    【讨论】:

    • 谢谢。我明白,如果我不使用某些与低版本不兼容的方法,那也没关系。
    【解决方案2】:

    正确的解决方案是向minor声明容器中使用的确切servlet api版本。

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

    如果实际运行时库与您的 POM 中的声明不同,那么您就是在自找麻烦。您是否会遇到问题是版本之间的兼容性问题。

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

    【讨论】:

    • 谢谢,你描述得很好,我投赞成票。
    猜你喜欢
    • 2011-03-24
    • 2015-06-05
    • 2018-05-19
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    相关资源
    最近更新 更多