Maven的依赖-硬依赖,传递依赖,依赖排除(NEW)

 依赖的查询 http://mvnrepository.com/ http://www.sonatype.org/nexus/      硬依赖 指的就是必须由本模块来引入的依赖 传递依赖 当引入其它模块时,由于其它模块中已经有了某些jar包的依赖了,将自动把依赖关系导入到本模块 如,A模块已经配置了对hibernate的依赖, 当B模块中引入A模块的依赖时,hibernate的依赖将自动传入到B模块中。 此时,B模块中不用再配置hibernate的依赖了,会根据传递过来的依赖自动导入那些jar包! 依赖排除 由于有了传递性依赖的特征,当不想导入当前所引入的模块的依赖时,可以使用排除策略,将对应的依赖排除掉。  硬依赖 user-core模块 该模块用于定义实体类,需要的依赖的jar包:hibernate, mysql-connector, log4j, junit  依赖包的说明: mysql-connector用来使用Java连接Mysql数据库 hibernate用来持久化对象 junit用来做单元测试 log4j用来做日志 依赖包的坐标通过上面的网址进行查询即可 则POM.xml配置如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.gc.user</groupId>
  <artifactId>user-core</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>user-core</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
	
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-core</artifactId>
		<version>4.2.6.Final</version>
	</dependency>
	
   <dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.26</version>
	</dependency>
    
    <dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.16</version>
	</dependency>
                           
  </dependencies>
</project>
    ==================================================================         传递依赖 user-dao模块  本模块主要功能是对对象进行持久化操作,当然就离不开hibernate的支持。 由于该模块需要使用到user-core模块中的实体,那么就需要引入user-core模块 那么,user-core模块就需要进行发布(deploy),当发布到私服上,本地就可以下载到该模块的jar包了 注意: user-core模块中已经依赖了hibernate的jar包,当user-dao模块引入user-core模块时, user-dao模块就不需要在pom.xml中配置对hibernate的依赖了,因为依赖会传递! 当然,由于user-core模块中对mysql-connector, log4j都有依赖,那么本模块也会自动引入它们! 注意: 依赖传递需要明确的两点: 1.依赖是否传递由scope来决定 2.传递的是依赖关系,而不是将jar包从A模块拷贝到B模块 由于Junit的scope定义为了test,所以该依赖关系不会传递到另一个模块中, 所以,本模块中如果要使用Junit,那么还需要配置对Junit的依赖!   本模块中的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.gc.user</groupId>
  <artifactId>user-dao</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>user-dao</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    
     <!-- 引入user-core,将会发生传递性依赖:user-core中的依赖是否会导入到本模块中,还要根据scope决定! -->  	<dependency>
  		<groupId>com.gc.user</groupId>
  		<artifactId>user-core</artifactId>
  		<version>0.0.1-SNAPSHOT</version>
  	</dependency>
  </dependencies>
</project>
    依赖的scope属性 决定该依赖是否传递,是否被打入war包 scope=test,依赖不会传递,生成war包时不会导入;测试包不需要传递,也不需要打入到war包。 scope=provided,依赖不会传递,生成war包时不会导入。仅编译,测试时有用,与test范围有点类似,但是出发点不一样。如servlet-api,容器已经提供了,就不能再包含了,否则,会导致包冲突等异常发生。 scope=runtime,编译时没有依赖,运行时有依赖 scope=system,导入本地jar包,通过指定本地路径来导入 scope=import   依赖传递的冲突 依赖的排除  ==================================================================       

猜你喜欢

转载自schy-hqh.iteye.com/blog/1950125