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 之依赖管理的主要内容,如果未能解决你的问题,请参考以下文章

maven 之依赖管理

纯干货!华为软件开发云编译构建之Maven

纯干货!华为软件开发云编译构建之Maven

基础补漏之Maven项目管理

java之maven之初识maven

JAVAWEB开发之Maven的入门详解——Maven的安装以及项目的结构和Maven的使用以及私服的搭建与配置