maven 之依赖管理
Posted forever_2h
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven 之依赖管理相关的知识,希望对你有一定的参考价值。
1. 基本配置:
<!-- dependencies 该标签下可以配置多个依赖 --> <dependencies> <!-- 配置一个依赖 通过gav来配置的--> <dependency> <!-- gav是必须配置的基本坐标 --> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!-- type用于指定依赖的类型 默认为jar --> <type>jar</type> <!-- classifier 该元素用来帮助定义构建输出的一些附属构件。比如javadoc和sources.jar 。 这是java文档和源代码。 <classifier></classifier>--> <!-- scope只依赖的范围 --> <scope>test</scope> </dependency> </dependencies>
1.依赖范围:
a)Compile 编译依赖范围。 如果没有指定,就会默认使用该依赖范围。 使用此依赖范围的Maven依赖, 对于编译,测试,运行都有效。
b)Test: 测试依赖范围。 只在测试的时候需要。比如junit
c)Provided: 已提供依赖范围。 使用此依赖范围的Maven依赖,对于编译和测试有效, 但在运行时无效。 典型的例子是servlet-API, 编译和测试项目的需要, 但在运行项目时, 由于容器已经提供, 就不需要Maven重复地引入一遍。
d)Runtime: 运行时依赖范围。 使用此依赖范围的Maven依赖,对于测试和运行有效, 但在编译代码时无效。 典型的例子是:jdbc驱动程序, 项目主代码的编译只需要jdk提供的jdbc接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体jdbc驱动。
e)System: 系统依赖范围。 一般不使用。
2.如何查找要依赖的坐标:
在网站上查询:http://mvnrepository.com/
也可以从私服的索引上查询
3.依赖的传递性
在maven中,依赖具有传递性。
项目A----->log4j
项目B------>项目A,那么项目B也就依赖了log4j
4.依赖的传递性可能造成冲突
项目A------>log4j1.2.9
项目B------->log4j1.2.12
项目B-------->项目A
解决方案:最短路径优先,项目B最终依赖的是log4j1.2.12
项目A------->log4j1.2.9
项目B------->log4j1.2.12
项目C-------->项目A
项目C--------->项目B
解决方案:谁先声明使用谁
5.依赖的排除
在jar冲突时,maven可以解决这个问题。但是有时想使用某一个jar,这个时候可以使用依赖排除的方式将不需要的jar包排除
<dependency> <groupId>cn.sxt</groupId> <artifactId>user-mapper</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 依赖的排除 --> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency>
7.聚合
由于项目可能是由多个模块组成的,一个一个模块操作比较麻烦。所以可以统一的设置一个项目来管理。
<groupId>cn.sxt</groupId> <artifactId>user-aggregation</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>user-aggregation</name> <modules> <module>../user-vo</module> <module>../user-mapper</module> <module>../user-service</module> </modules>
8 . 继承
父类的项目为pom
<groupId>cn.sxt</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>user-parent</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <log4j.version>1.2.9</log4j.version> </properties> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> </dependencies>
子类的配置文件
<parent> <groupId>cn.sxt</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>cn.sxt</groupId> <artifactId>user-vo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>user-vo</name> <dependencyManagement> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> </dependencies> </dependencyManagement>
9. web项目开发啊
a)选择骨架时,选择webapp
依赖相关的jar包
<dependency> <groupId>cn.sxt</groupId> <artifactId>user-service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.3.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
配置tomcat插件
<!-- 配置插件 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<!-- 端口 -->
<port>8080</port>
<!-- 访问路径 -->
<path>/</path>
</configuration>
</plugin>
</plugins>
通过命令:tomcat:tun运行
测试:http://localhost:8080/
以上是关于maven 之依赖管理的主要内容,如果未能解决你的问题,请参考以下文章