zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    hash表及带注释插头dp
    NOIP模拟测试9「随·单·题」
    静态点分治总结
    NOIP模拟测试8「匹配·回家」
    NOIP模拟测试8「寿司」
    「PKUWC2018」Slay the Spire
    矩阵快速幂总结
    SQL中的object_id函数
    SQL数据库Replace的用法
    SQL批量提交修改业务
  • 原文地址:https://www.cnblogs.com/forever2h/p/6857218.html
Copyright © 2011-2022 走看看