学习大数据——maven的依赖管理

依赖的范围

  1. compile
    [1]main目录下的Java代码可以访问这个范围的依赖
    [2]test目录下的Java代码可以访问这个范围的依赖
    [3]部署到Tomcat服务器上运行时要放在WEB-INF的lib目录下
     例如:对Hello的依赖。主程序、测试程序和服务器运行时都需要用到。

  2. test
    [1]main目录下的Java代码不能访问这个范围的依赖
    [2]test目录下的Java代码可以访问这个范围的依赖
    [3]部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
     例如:对junit的依赖。仅仅是测试程序部分需要。

  3. provided
    [1]main目录下的Java代码可以访问这个范围的依赖
    [2]test目录下的Java代码可以访问这个范围的依赖
    [3]部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
     例如:servlet-api在服务器上运行时,Servlet容器会提供相关API,所以部署的时候不需要。

  4. 其他:runtime、import、system等。

各个依赖范围的作用可以概括为下图:
依赖范围

依赖的传递性

       当存在间接依赖的情况时,主工程对间接依赖的jar可以访问吗?这要看间接依赖的jar包引入时的依赖范围——只有依赖范围为compile时可以访问。例如:
传递性

依赖的原则

  1. 路径最短者优先
    路径最短者优先
  2. 路径相同时先声明者优先
    路径相同时先声明者优先
    这里“声明”的先后顺序指的是dependency标签配置的先后顺序。

依赖的排除

  1. 有的时候为了确保程序正确可以将有可能重复的间接依赖排除。请看如下的例子:
     假设当前工程为public,直接依赖environment。environment依赖commons-logging的1.1.1对于public来说是间接依赖。
     当前工程public直接依赖commons-logging的1.1.2加入exclusions配置后可以在依environment的时候排除版本为1.1.1的commons-logging的间接依赖。
	<dependency>
		<groupId>com.learn.maven</groupId>
		<artifactId>Environment</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<!-- 依赖排除 -->
		<exclusions>
			<exclusion>
				<groupId>commons-logging</groupId>
				<artifactId>commons-logging</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	<dependency>
		<groupId>commons-logging</groupId>
		<artifactId>commons-logging</artifactId>
		<version>1.1.2</version>
	</dependency>

统一管理目标jar包的版本

   以对Spring的jar包依赖为例:Spring的每一个版本中都包含spring-core、spring-context等jar包。我们应该导入版本一致的Spring jar包,而不是使用4.0.0的spring-core的同时使用4.1.1的spring-context。

在project标签下添加:

<properties>
	<spring.version>4.1.1.RELEASE</spring.version>
</properties>

在dependencies标签下使用:

	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-orm</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>${spring.version}</version>
	</dependency>

参考尚硅谷学习课件

发布了37 篇原创文章 · 获赞 7 · 访问量 688

猜你喜欢

转载自blog.csdn.net/qq_40394792/article/details/104321794