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/

时间: 2024-10-27 14:15:50

maven 之依赖管理的相关文章

maven入门(8)maven的依赖管理

我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置    依赖可以声明如下: Xml代码   <project> ... <dependencies> <dependency> <groupId>group-a</groupId> <artifactId>artifact-a</artifactId> <version>1.0</version>

Spring mvc 4系列教程(二)——依赖管理(Dependency Management)和命名规范(Naming Conventions)

依赖管理(Dependency Management)和命名规范(Naming Conventions) 依赖管理和依赖注入(dependency injection)是有区别的.为了将Spring的优秀特性(如依赖注入)带到你的应用中,需要在编译时或运行时部署所需要的库(jar包).这些依赖不是虚拟的构件,而是文件系统上的物理资源.依赖管理的过程涉及到定位这些资源.存储资源.加入classpath.依赖可以是直接的(例如Spring运行时),也可以是间接的(例如commons-dbcp).间接

Maven之——依赖与插件管理

Maven之--依赖与插件管理 1.    依赖管理 并不是父POM中配置的所有依赖在不同的子类中都能用到.或者用到了但是不是统一版本.为解决这个.在父POM标签中定义依赖信息.在子POM中加入依赖的引入.具体细节如下:在父POM中配置项目中使用到的依赖.但是不再是dependency标签中配置.因为此标签可以自动被继承.使用dependencyManagement标签.此标签中定义的dependency不会被子POM自动引入.必须在子类中使用dependency声明.可能有些时候会觉得直接在子

Java构建工具:如何用Maven,Gradle和Ant+Ivy进行依赖管理

原文来自:https://zeroturnaround.com/rebellabs/java-build-tools-how-dependency-management-works-with-maven-gradle-and-ant-ivy/ 编译的时候可以运行,运行时出问题 在当今java项目自动化构建的场景当中,依赖管理已经成为了项目构建自动化工具中的一个主要部分,但是在过去并总是这样. 回想以前那个很爽的时候,你的项目依赖性管理只需要将jar包导入到lib文件夹中,然后将其加入到你的版本控

4.Maven概念模型,maven的生命周期,Maven坐标,依赖管理(依赖范围,依赖声明),仓库管理,私服概念

 1 maven概念模型 2 maven的生命周期,项目构建过程 Maven生命周期就是为了对所有的构建过程进行抽象和统一 包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤 Maven有"三套"相互独立的生命周期,而且相互独立,这三套生命周期分别是: Maven三大生命周期 clean:清理项目的 在进行真正的构建之前进行一些清理工作. default:构建项目的 构建的核心部分,编译,测试,打包,部署等等. site:生成项目站点的 生成项目报告,站点,发布站点 要

maven——依赖管理

管理包依赖是 Maven 核心功能之一,下面通过如何引入 jar 包:如何解析 jar 包依赖:包冲突是如何产生:如何解决包冲突:依赖管理解决什么问题:什么是依赖范围:使用包依赖的最佳实践等 6 个问题来介绍. 如何引入 jar 包 在代码开发时,如果需要使用第三方 jar 包提供的类库,那么需要在 pom.xml 加入该 jar 包依赖. 例如:使用 zookeeper client <dependencies> <!-- https://mvnrepository.com/artif

maven——项目构建和依赖管理工具

apache maven是一个用于项目构建和依赖管理的工具. 添加archetype https://repo1.maven.org/maven2/archetype-catalog.xml 更改本地仓库存储位置:修改配置文件${user.home}/.m2/settings.xml或 $MAVEN_HOME/conf/setting.xml中的内容 <localRepository>... mvn archetype:generate会非常慢,搜索了本地和远程太多archetype,而加上-

Maven——项目管理工具,可以对 Java 项目进行构建、依赖管理。

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑.当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件. Maven

Maven教程3(依赖管理)

Maven教程2(Eclipse配置及maven项目) Maven项目,依赖,构建配置,以及构件:所有这些都是要建模和表述的对象.这些对 象通过一个名为项目对象模型(Project Object Model, POM)的XML文件描述.这个POM 告诉Maven它正处理什么类型的项目,如何修改默认的行为来从源码生成输出.同样 的方式,一个Java Web应用有一个web.xml文件来描述,配置,及自定义该应用,一个 Maven项目则通过一个 pom.xml文件定义.该文件是Maven中一个项目的