我已阅读文档并有所了解。
请更正或告知真相;按照我的理解:
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/