**
Maven中的依赖
**
<dependencies>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
<scope></scope>
</dependency>
</dependencies>
maven中的依赖关系对于新手来说其实可以理解为继承关系,简单来说就是子项目依赖父项目从而使用父项目中的包和工具。
-
依赖的范围(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中查找它。 -
依赖管理器
dependencyManagement和dependenciesdependencyManagement:只能在父项目中出现,在下面写的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>