maven

Posted FromScratch

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven相关的知识,希望对你有一定的参考价值。

1、环境变量设置M2_HOME--指向Maven安装目录
2、个性设置~/.m2/settings
 2.1 复制 M2_HOME下conf下的settings.xml
 2.2 设置代理
     <settings>
     ...
       <proxies>
         <proxy>
         <id>my-proxy</id>
         <active>true</active>
         <protocol>http</protocol>
         <host>218.14.227.197</host>
         <port>3128</port>
         <!--
         <username>***</username>
         <password>***</password>
         <nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts>
         -->
         </proxy>
       </proxies>
     ...
     </settings>
3、依赖调解 路径最短/声明优先--解决重复传递依赖的解析问题
  3.1 依赖调解(Dependency Mediation)
      Maven 引入的传递性依赖机制,一方面大大简化和方便了依赖声明,大部分情况下我们只
      需要关心项目的直接依赖是什么,而不用考虑这些直接依赖会引入什么传递性依赖。但有
      时候,当传递性依赖造成问题的时候,我们就需要清楚地知道该传递性依赖是从哪条依赖
      路径引入的。
      例如,项目 A 有这样的依赖关系:A->B->C->X(1.0)、A->D->X(2.0),X 是 A 的传递性
      依赖,但是两条依赖路径上有两个版本的 X,那么哪个 X 会被 Maven 解析使用呢?两个版
      本都被解析显然是不对的,因为那会造成依赖重复,因此必须选择一个。Maven 依赖调解
      的第一原则是:路径最近者优先。该例中 X(1.0)的路径长度为 3,而 X(2.0)的路径长
      度为 2,因此 X(2.0)会被解析使用。
      依赖调解第一原则不能解决所有问题,比如这样的依赖关系:A->B->Y(1.0)、A->C->Y
      (2.0),Y(1.0)和 Y(2.0)的依赖路径长度是一样的,都为 2。那么到底谁会被解析使
      用呢?在 Maven 2.0.8 及之前的版本中,这是不确定的,但是从 Maven 2.0.9 开始,为了
      尽可能避免构建的不确定性,Maven 定义了依赖调解的第二原则:第一声明者优先。在依
      赖路径长度相等的前提下,在 POM 中依赖声明的顺序决定了谁会被解析使用,顺序最靠
      前的那个依赖优胜。该例中,如果 B 的依赖声明在 C 之前,那么 Y(1.0)就会被解析使
      用。
  3.2 可选依赖
      假设有这样一个依赖关系,项目 A 依赖于项目 B,B 依赖于项目 X 和 Y,B 对于 X 和 Y 的
      依赖都是可选依赖:A->B、B->X(可选)、B->Y(可选)。根据传递性依赖的定义,如果
      所有这三个依赖的范围都是 compile,那么 X、Y 就是 A 的 compile 范围传递性依赖。然
      而,由于这里 X、Y 是可选依赖,依赖将不会得以传递,换句话说,X、Y 将不会对 A 有任
      何影响。A如果需要,需要显式声明。
      <project>
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.juvenxu.mvnbook</groupId>
        <artifactId>project-b</artifactId>
        <version>1.0.0</version>
        <dependencies>
        <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.10</version>
        <optional>true</optional>
        </dependency>
        <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>8.4-701.jdbc3</version>
        <optional>true</optional>
        </dependency>
        </dependencies>
    </project>

以上是关于maven的主要内容,如果未能解决你的问题,请参考以下文章

Mavenmaven简介

mavenmaven jar 包 冲突 的解决方式

Maven实战之初识MavenMaven的简单介绍

MavenMaven四大特性

mavenmaven pom文件详解

mavenmaven各种奇葩问题