我已阅读文档并有一些了解.
请更正或告知我真相; 根据我的理解:
provided
依赖项必须位于运行代码的计算机上,并且必须包含在路径中
compile
依赖项不会在运行代码的计算机上,因此请将它们包含在构建中
system
与提供的完全相同,但您需要严格依赖于jar文件中的依赖项
import
好像它应该从其他POM文件导入依赖项,但我不知道如何/为什么,所以一点点阐述将不胜感激
Dan*_*lan 55
你错了/暧昧provided.这意味着,"这个jar应该在本地编译,但它会在运行时通过其他东西在类路径中提供,所以不要把它包含在类路径中." 例如,所有Web容器(例如:tomcat)都包含servlet的jar.您应该使用providedservlet类,以便可以在本地编译代码,但是您不希望覆盖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>
Run Code Online (Sandbox Code Playgroud)
看看它有怎样的<systemPath>?这就是区别.如果provided知道如何从存储库获取依赖关系,则不指定路径. 只system从您的文件系统中获取它.
我从来没有听说过import.@JigarJoshi挂http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html它说
导入(仅适用于Maven 2.0.9或更高版本)
此范围仅用于
<dependencyManagement>节中pom类型的依赖项.它表示应该用该POM部分中的依赖项替换指定的POM.由于它们被替换,具有导入范围的依赖性实际上不参与限制依赖性的传递性.
我想这就是说,"把这个项目的所有依赖项都包含在内,并在本<dependencyManagement>节中内联它们." 如果我错了,有人会纠正我.
Pav*_*van 18
请在Maven中找到范围的确切含义
我指的是Maven http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
依赖关系范围用于限制依赖关系的传递性,还用于影响用于各种构建任务的类路径.
有6个范围可用:
编译:
这是默认范围,如果未指定,则使用此范围.编译依赖项在项目的所有类路径中都可用.此外,这些依赖项将传播到依赖项目.
提供:
这很像compile,但表示您希望JDK或容器在运行时提供依赖性.例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类.此范围仅在编译和测试类路径中可用,并且不可传递.
运行时:
此范围表示编译不需要依赖项,但是用于执行.它位于运行时和测试类路径中,但不是编译类路径.
测试:
此范围表示正常使用应用程序不需要依赖关系,并且仅可用于测试编译和执行阶段.
系统:
此范围与提供的类似,只是您必须提供明确包含它的JAR.工件始终可用,并且不会在存储库中查找.
导入(仅适用于Maven 2.0.9或更高版本):
此范围仅用于节中pom类型的依赖项.它表示应该用该POM部分中的依赖项替换指定的POM.由于它们被替换,具有导入范围的依赖性实际上不参与限制依赖性的传递性.