gpt4 book ai didi

maven - 这些 Maven 依赖范围 : provided/compile/system/import 之间有什么区别

转载 作者:行者123 更新时间:2023-12-03 08:16:25 28 4
gpt4 key购买 nike

我已阅读文档并有所了解。

请更正或告知真相;按照我的理解:

  • provided依赖项必须在您运行代码的机器上,并且必须包含在路径
  • 中。
  • compile依赖项不会在运行代码的机器上,因此将它们包含在构建中
  • system与提供的完全相同,但您需要严格地将依赖项存在于 jar 文件中
  • import似乎它应该从其他一些 POM 文件导入依赖项,但我不知道如何/为什么,所以稍微详细说明将不胜感激
  • 最佳答案

    您对 provided 的看法错误/含糊不清.这意味着,“这个 jar 应该在本地编译,但它会在运行时由其他东西在类路径上提供,所以不要为我将它包含在类路径中。”例如,所有 Web 容器(例如:tomcat)都包含 servlet 的 jar。您应该使用 provided用于 servlet 类,以便您可以在本地编译代码,但您不想在部署时覆盖 tomcat 为您提供的 servlet 类。
    system意思是,“这些依赖关系在我的系统上,我想直接指向它们”。如果可以,您希望避免这种情况,因为另一台计算机上的另一个人不一定有这些依赖项。provided的区别更容易显示:

    <dependency>
    <groupId>javax.sql</groupId>
    <artifactId>jdbc-stdext</artifactId>
    <version>2.0</version>
    <scope>system</scope>
    <systemPath>${java.home}/lib/rt.jar</systemPath>
    </dependency>
    看看它是如何做到的 <systemPath> ?这就是区别。您没有用 provided 指定路径,前提是知道如何从存储库中获取依赖项。 system仅从您的文件系统获取它。

    我什至从未听说过 import . @JigarJoshi 链接到 http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html其中说

    import (only available in Maven 2.0.9 or later)

    This scope is only used on a dependency of type pom in the <dependencyManagement> section. It indicates that the specified POM should be replaced with the dependencies in that POM's section. Since they are replaced, dependencies with a scope of import do not actually participate in limiting the transitivity of a dependency.


    我认为这是说,“获取该项目具有的所有依赖项,并将它们内联在此 <dependencyManagement> 部分中。”如果我错了,有人会纠正我。

    关于maven - 这些 Maven 依赖范围 : provided/compile/system/import 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907682/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com