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

标签 maven maven-2

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

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

  • 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/

    相关文章:

    maven-2 - 使用 Maven 配置文件来控制构建执行

    svn - 在我的 Maven 程序集中包含来自另一个 subversion 存储库的文件

    maven-2 - Maven : In the nar-plugin, 你能指定从哪里获取包含吗?

    maven - Apache Tomcat Maven 插件 uriEncoding 不适用于 https

    java - 关于 mongodb for Java 的 ORM 工具/框架

    unit-testing - 只有在单元测试成功后,Maven 多模块才会部署到存储库

    java - 如何通过 Maven2 pom.xml 获取 Hibernate + javax.persistence

    maven-2 - maven编译失败

    单个附加测试的 Maven 执行

    scala - 如何让 scala-maven-plugin 识别 Cp1252 编码?