maven的依赖与继承


1.包的依赖

     dependency的包有几个作用域:

         runtime表示运行的时候依赖,编译的时候不依赖。例如连接数据库的包,

         compile:编译的时候依赖。默认   

         provided:编译测试的时候有效,最后生成的项目包中没有这种jar包。例如servlet-api,

         test:测试的时候有效,其他时候都没用,例如junit,

     打包时只有runtime和compile可以包含。

     依赖还可以传递:

         jar包的级别是:自己项目pom中dependency的jar包级别最高,然后是引用其他项目的jar包次一级,更次一级的是引用两个项目,都有A.jar,但是在B项目中是直接引用A.jar,C项目是通过D.jar来引用的A.jar(间接引用),那么C中的A.jar比B中的A.jar次一级。以此类推。(一个项目只能引用另一个项目compile和runtime范围的包,只要package时能被包含就能被引用)

     如果引用有相同的jar包但是版本不同,引用的是级别最高的,如果级别一样,根据dependency的顺序来引用,谁在前就引用谁的。

     但是还可以排除掉某个项目中的jar包。

 <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>java-test</artifactId>
      <version>${project.version}</version>
      <exclusions>
		<exclusion>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
		</exclusion>
	  </exclusions>
    </dependency>
    直接引用:dependency中引用的。间接引用:dependency中的jar包里面包含的jar包

    举个例子,A,B,C三个项目,A直接引用a-1.0,b-1.0,c-1.0,B直接引用a-2.0,b-2.0,b-2.0引用c-1.5,C项目直接引用a-3.0,引用B,C项目,B在C前面。那么C项目引用的jar包为a-3.0,b-2.0,c-1.0。


2.继承

     如果一个项目有多个maven模块,如果不用聚合那么每次打包每个模块都要运行,但是用来聚合后,只运行一次就行了。

     新建一个maven,package选择pom不选jar或war。然后在pom文件中加入:

<modules>
	<module>../a-core</module>//模块相对于pom文件的位置
	<module>../a-util</module>
	<module>../a-web</module>
</modules>

     如果多个模块有相同的内容,那么就可以用一个父模块来实现相同的内容,其他模块只要继承父模块就行了。父模块package选择pom,不选jar或war。

<modelVersion>4.0.0</modelVersion>
  <groupId>test.java</groupId>
  <artifactId>parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  
  <modules>
  	<module>../java-depend</module>
  	<module>../java-test</module>
  </modules>
  
   <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  
	<dependencyManagement>
		<dependencies>
			<dependency>
		      <groupId>junit</groupId>
		      <artifactId>junit</artifactId>
		      <version>4.10</version>
		      <scope>test</scope>
		    </dependency>
		    
		</dependencies>
	</dependencyManagement>	
     父模块中把所有jar包都引用进来,子模块就不用配置jar包的版本和作用域了。子模块:

  <modelVersion>4.0.0</modelVersion>

	<parent>//引用父模块
	  	<groupId>test.java</groupId>
	  	<artifactId>parent</artifactId>
	  	<version>0.0.1-SNAPSHOT</version>
	  	<relativePath>../parent/pom.xml</relativePath>//父模块的pom文件
	  </parent>
  <artifactId>java-depend</artifactId>
  <packaging>jar</packaging>

  <name>java-depend</name>

  <dependencies>
   	<dependency>//依赖不用版本和作用域了,都在父模块里
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>java-test</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
    子模块的直接依赖会覆盖父模块的依赖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值