Maven的依赖

**

Maven中的依赖

**

<dependencies>
   	<dependency>
   	    <groupId>com.mchange</groupId>
   	    <artifactId>c3p0</artifactId>
   	    <version>0.9.5.2</version>
          <scope></scope>
   	</dependency>
   </dependencies>

maven中的依赖关系对于新手来说其实可以理解为继承关系,简单来说就是子项目依赖父项目从而使用父项目中的包和工具。

  1. 依赖的范围(scope)
    即在上面的<scope></scope>中填写的内容。

    (1)Compile:缺省值,适用于所有阶段,会随着项目一起发布
    (2)Provider:类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar(javaee)
    (3)Runtime:只在运行时使用,如JDBC驱动,适用运行和测试阶段。
    (4)Test:只在测试时使用,用于编译和运行测试代码。不会随项目(mvn install)发布。
    (5)System:类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

  2. 依赖管理器
    dependencyManagement和dependencies

    dependencyManagement:只能在父项目中出现,在下面写的jar包必须带上版本号;

    dependencies:下面写的jar包可以不带版本号;如果木有去父项目中找依赖管理器;或者dependencies

    以导c3p0为例,修改pom.xml文件如下

父项目demoMav的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.jinghangzz</groupId>
	<artifactId>demoMav</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>
	<name>demoMav</name>
	<description>demoMav</description>
	<modules>
		<module>demoMav-childA</module>
		<module>demoMav-childB</module>
	</modules>
	
	<!-- 自定义属性 -->
	<properties>
		<!-- 标签名随便写,在版本号引用的地方要使用
			到后面log4j2的时候就体现出来了
		 -->
		<c3p0.version>0.9.5.2</c3p0.version>
	</properties>
	
	<!-- 所有的标签,外面肯定是一个复数,里面是一个单数 -->
	<!-- 
		dependencyManagement:依赖管理器,在父项目必须加上jar包的版本号,在子项目中千万不要加版本号
		在子项目中重新定义一个dependency,但是不能写版本号
		
		解决多版本问题:
			项目经理或者技术总监,在父项目中写上所有的依赖管理器;(普通开发人员不允许操作父项目,木有权限)
			普通开发人员使用jar包的时候,先到父项目依赖管理器中找jar包,找到以后,在子项目中不写版本号;
			如果父项目中木有jar包,给项目经理或者技术总监说一声
	 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
			    <groupId>com.mchange</groupId>
			    <artifactId>c3p0</artifactId>
			   <!--  <version>0.9.5.2</version> -->
			   <!-- ${自定义属性的标签名} -->
			   <version>${c3p0.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>
	
	<!-- 标准配置 -->
	<build>
		<!-- 插件 -->
		<plugins>
			<!-- JDK版本
				在Plugin中,要把dependency换成plugin
			 -->
			<plugin>
			    <groupId>org.apache.maven.plugins</groupId>
			    <artifactId>maven-compiler-plugin</artifactId>
			    <version>3.8.0</version>
			    <configuration>
			    	<!-- -JDK的版本 -->
			    	<source>1.8</source>
			    	<target>1.8</target>
			    	<encoding>UTF-8</encoding>
			    </configuration>
			</plugin>
			
			<!-- 打包源代码 -->
			<plugin>
			    <groupId>org.apache.maven.plugins</groupId>
			    <artifactId>maven-source-plugin</artifactId>
			    <version>3.0.1</version>
			    <configuration>
			    	<!-- 以一个附件的形式打包 -->
			    	<attach>true</attach>
			    </configuration>
			    <executions>
			    	<execution>
			    		<!-- 阶段 -->
			    		<phase>compile</phase>
			    		<!-- 目标 -->
			    		<goals>
			    			<goal>jar</goal>
			    		</goals>
			    	</execution>
			    </executions>
			</plugin>
			
			<!-- 设置resouce目录下的所有文件编码,否则如果配置xml文件中有中文字符,部署后可能会引起运行失败 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<configuration>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			
			<!-- 忽略编译项目时的测试运行
				maven install的时候自动跳过maven test
					maven clean
					maven build
					maven test(自动跳过此部分)
					maven install
			 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

子项目demoMav-childA的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>
	<parent>
		<groupId>com.jinghangzz</groupId>
		<artifactId>demoMav</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>demoMav-childA</artifactId>
	<name>demoMav-childA</name>
	<description>demoMav-childA</description>
	
	<dependencies>
		<!-- 当发现一个pom.xml中, dependency木有写版本号,系统会到父类中找依赖管理器;-->
		<dependency>
		    <groupId>com.mchange</groupId>
		    <artifactId>c3p0</artifactId>
		</dependency>
	</dependencies>
</project>

依赖管理器最重要的一点就是只能在父项目中有,且必须带上版本号,子项目中不带版本号。

注意,以上的依赖关系都是在有依赖管理器(dependencyManagemen)的前提下,而没有管理器的时候版本号还是该带就带的。如

子项目demoMav-childB的pom.xml,子项目demoMav-childB依赖子项目demoMav-childA

<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>
	<parent>
		<groupId>com.jinghangzz</groupId>
		<artifactId>demoMav</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>demoMav-childB</artifactId>
	<name>demoMav-childB</name>
	<description>demoMav-childB</description>
	<dependencies>
		<dependency>
			<groupId>com.jinghangzz</groupId>
			<artifactId>demoMav-childA</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<!-- 在此项目中如果木有c3p0,此项目依赖A项目,A项目有c3p0,会把A项目中所有的jar都带过来 -->
	</dependencies>
</project>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值