我已经阅读了文档,有了一些了解。
请纠正或告诉我真相;根据我的理解:
-
provided
依赖项必须在运行代码的机器上,并且必须包含在 路径中。 compile
依赖项将不在运行代码的机器上,因此将它们包含在构建system
与提供的完全相同,但您需要依赖项严格存在于jar文件中import
似乎应该从其他一些POM文件导入依赖关系,但我不知道如何/为什么,所以一点阐述将是赞赏
提供的意思是,这个jar应该在本地编译,但是在运行时,它会在类路径上由其他东西提供,所以不要在类路径中包含它。"例如,所有的web容器(例如:tomcat)都包含servlet的jar。您应该为servlet类使用provided
,这样您就可以在本地编译代码,但是您不希望在部署到tomcat时覆盖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(仅在Maven 2.0.9或更高版本中可用)
此作用域仅用于
<dependencyManagement>
节中pom类型的依赖项。它表明指定的POM应该用该POM部分中的依赖项替换。由于它们被替换了,具有import范围的依赖项实际上并不参与限制依赖项的可传递性。
我认为这是在说,"把这个项目所有的依赖项都内联到这个<dependencyManagement>
节中。"如果我说错了,谁来指正我