若修改了暗中同意本地仓库路径

图片 1

依赖

》》》》》》》》》》

maven版本:apache-maven-3.1.1    IDE: springsource   暗中同意支持maven集成
            若使用的是eclipse,则要求先安装m2eclipse来帮助maven的融会

设置到位后,设置为环境变量

     注意:

命令行输入,如下图片就标志成功

     修改IDE集成的maven版本,使用本人新装置的maven 
(Window->Preferences->Maven->Installations)      
若修改了私下认可本地仓库路径,还索要在
Window->Preferences->Maven->User Settings
中布局路径指向修改后的地方仓库下的settings.xml文件,       本地路径为
D:\dev_env\maven\settings.xml

图片 2

注重包的查询① 、全体的正视性都是透过坐标来进行仓库储存的(GAV–>groupId、artifactId、version),也是由此坐标来寻觅的
二 、有一部分网上的堆栈提供了坐标的查询(http://mvnrepository.com),输入供给寻找的jar包(如:spring,struts)

 

依赖传递

》》》》》》》》》》

若项目A重视了C jar包,B项目依赖了A项目,则B项目依赖了C
jar包,那正是借助的传递(那种借助是根据compile范围开始展览传递的)

常用的命令

上边以3个实例来证明重视传递的争辩和maven化解争辨的编写制定:

图片 3

 若存在A、B、C、D多少个体系,他们之间相互正视,A注重B和C,B重视D

 

 同等长短的倚重路径–>依据正视定义顺序处理争辩             

》》》》》》》》》》

若B和C中都凭借了POI的jar包,B注重poi-3.9 ,C依赖poi-3.10,那么依照传递性A也会凭借poi,此时依据B和C在A的pom文件(A重视B、C,会在dependencies中定义)中凭借的逐条决定poi的本子,若B在后边则A依赖poi-3.9;不然重视poi-3.10

图片 4

分裂等长短的借助路径–>根据信赖路径长度取路径短的信赖性       

1.本土仓库的安顿,

若C和D中都依靠了POI的jar包,C注重poi-3.9 ,D依赖poi-3.10,那么依据传递性A也会凭借poi,由于A到C的路子较短,所以A会凭借poi-3.9

maven下载的都在此地,或然是温馨编写翻译所依靠的包 
<localRepository>F:\hs\repo</localRepository>

可在借助中排除有个别依赖关系(控制依赖、也足以缓解正视争执)

改变本地仓库的职分

若B和C中都凭借了log4j的jar包,B重视log4j-1.2.16 ,C注重log4j-1.2.17,那么依据传递性A也会依赖log4j,可在A项指标pom文件中排除B项目标log4j正视,此时A就会正视C的log4j-1.2.17

图片 5 

A项目pom文件注重定义如下:

2.镜像仓库的配备

[html] view
plain
copyprint?图片 6图片 7

url:大家国内的镜像地址

  1. <dependency>  

  2.             <groupId>B</groupId>  

  3.             <artifactId>B</artifactId>  

  4.             <version>SNAPSHOT-0.0.1</version>  

  5.             <type>jar</type>  

  6.             <scope>compile</scope>  

  7.             <exclusions>  

  8.                 <exclusion>  

  9.                     <groupId>log4j</groupId>  

  10.                     <artifactId>log4j</artifactId>  

  11.                     <version>1.2.16</version>  

  12.                 </exclusion>  

  13.             </exclusions>  

  14.         </dependency>  

  15.         <dependency>  

  16.             <groupId>C</groupId>  

  17.             <artifactId>C</artifactId>  

  18.             <version>SNAPSHOT-0.0.1</version>  

  19.             <type>jar</type>  

  20.             <scope>compile</scope>  

  21.         </dependency>  

一向不那一个mirror配置是暗中同意国外的原仓库 ,一般我们都以国内的镜像仓库

<dependency>
<groupId>B</groupId> <artifactId>B</artifactId>
<version>SNAPSHOT-0.0.1</version>
<type>jar</type> <scope>compile</scope>
<exclusions> <exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version> </exclusion>
</exclusions> </dependency> <dependency>
<groupId>C</groupId> <artifactId>C</artifactId>
<version>SNAPSHOT-0.0.1</version>
<type>jar</type> <scope>compile</scope>
</dependency>

图片 8

依傍范围

 

① 、test范围指的是测试范围有效,在编译和打包时都不会动用那一个依靠
② 、compile范围指的是编写翻译范围有效,在编写翻译和包装时都会将借助仓库储存进去
叁 、provided正视:在编写翻译和测试的经过中用,最终生成war包时不会进入,诸如:servlet-api,因为servlet-api,tomcat等web服务器已经存在了,如果再打包会争辩④ 、runtime在运营的时候重视,在编写翻译的时候不依赖 暗许的注重范围是compile

》》》》》》》》》》

重视范围对传递性注重的影响

pom.xml的认识

要是今后有1个门类A注重项目B,项目B信赖log4j,则称A对B的依靠为率先直接信赖,B对log4j的依赖为第壹一向正视。

网上有很详细的详解,能够百度下

下图中右侧一列表示第3贯接注重的界定,上边的一条龙表示第3从来重视的限制。

图片 9

只要:A对B的依赖性范围为compile(<scope>compile</scope>),B对log4j的重视范围为compile,

 

          
那么依照下图可查到传递性重视的限量为compile,表示A对log4j的依赖也是compile

》》》》》》》》》》

图片 10

重庆大学是在pom.xml中做设置

据悉地点图例可计算:

<dependencies>

      
当第2直接信赖的限制为compile时,传递性注重的限量与第二平素正视的限定一致;

1.maven正视范围   <scope>test</scope> 有6种   compile编写翻译 
provided容器 runtime运转  test测试  system系统  import

       当第2平昔注重的限量为test时,正视不会传递;

2.maven注重传递 本人有传递性 <dependencies> 
假如B依赖A,C注重B,所以C也重视A,

      
当第1直接依赖的限制为provided时,唯有当第壹一贯信赖的限量也为provided时,依赖才会传递且传递正视的限定也是provided;

<!– 当计算传递重视时,
从依赖构件列表里,列出被免除的借助构件集。即告诉maven你只依靠钦点的类型,不正视项目标依靠。此成分主要用来缓解版本争论难题–>
<exclusions>
<exclusion>
<artifactId> iiiii</artifactId>
<groupId> iiiiiiiii</groupId>
</exclusion>
</exclusions>
<!–
可选依赖,假如您在档次B中把C重视注脚为可选,你就要求在凭借于B的类型(例如项目A)中显式的引用对C的注重性。可选重视阻断注重的传递性。
–>

       当第三一直依赖的限制为runtime时,传递性依赖的限量与第①一贯依赖范围一致(但首先直接信赖范围为compile时比较特殊,此时传递性重视范围为runtime)。

 

聚拢和持续

》》》》》》》》》》

聚合:分模块开发的逐一子项目要分头编写翻译、测试、打包会很辛勤,能够创建一个独门的品种parent,这几个体系中唯有多个pom文件,将作其余子项目作为模块(在pom文件中使用module配置)配置到parent项目中,运转parent中的pom文件,就能半自动同时一并营造种种模块。

总结

继承:分模块开发的次第子项目标pom文件中会有相当的大片段的布署成分是再度的(如:作为二个大品种的相继模块,groupId应该是一模一样的;注重的重复配置),能够创建1个独门的门类parent,那个类型的pom文件会抽取这二个公有的再度配置供各样子模块继承(子项目标pom文件中使用parent配置需求继续的pom项目新闻)。

图片 11

持续的安插首要是:

 

一 、在子项目标pom文件中使用parent成分对父pom实行定义

 

二 、在父pom文件中会定义一些国有的因素供子pom继承,父pom中定义重视是要在dependencies节点上添加四个父级节点dependencyManagement

from:http://www.imooc.com/learn/443

集合和持续的父pom文件中的packaging属性的值必须是pom

上面引用上一篇文章中涉及的录像中的实例:

图片 12user-parent作为聚合项目、被持续的父项目,那几个种类中只有3个pom文件;别的的都以子项目

user-parent的pom文件

[html] view
plain
copyprint?图片 13图片 14

  1. <project xmlns=”http://maven.apache.org/POM/4.0.0” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”  

  2.   xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0%C2%A0http://maven.apache.org/xsd/maven-4.0.0.xsd“>  

  3.   <modelVersion>4.0.0</modelVersion>  

  4.   <groupId>org.konghao.user</groupId>  

  5.   <artifactId>user-parent</artifactId>  

  6.   <version>0.0.1-SNAPSHOT</version>  

  7.   <packaging>pom</packaging>  

  8.   <modules>  

  9.     <module>../user-core</module>  

  10.     <module>../user-dao</module>  

  11.     <module>../user-log</module>  

  12.     <module>../user-service</module>  

  13.   </modules>  

  14.   <url>http://maven.apache.org</url>  

  15.   <!– <repositories>  

  16.     <repository>  

  17.       <id>central</id>  

  18.       <name>Central Repository</name>  

  19.       <url>https://nexus.sourcesense.com/nexus/content/repositories/public/</url>  

  20.       <layout>default</layout>  

  21.       <snapshots>  

  22.         <enabled>false</enabled>  

  23.       </snapshots>  

  24.     </repository>  

  25.   </repositories> –>  

  26.   <properties>  

  27.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  

  28.     <junit.version>4.10</junit.version>  

  29.   </properties>  

  30.   <dependencyManagement>  

  31.     <dependencies>  

  32.         <dependency>  

  33.             <groupId>junit</groupId>  

  34.             <artifactId>junit</artifactId>  

  35.             <version>${junit.version}</version>  

  36.             <scope>test</scope>  

  37.         </dependency>  

  38.         <dependency>  

  39.             <groupId>org.konghao.user</groupId>  

  40.             <artifactId>user-core</artifactId>  

  41.             <version>0.0.1-SNAPSHOT</version>  

  42.         </dependency>  

  43.         <dependency>  

  44.             <groupId>org.konghao.user</groupId>  

  45.             <artifactId>user-dao</artifactId>  

  46.             <version>0.0.1-SNAPSHOT</version>  

  47.             <type>jar</type>  

  48.             <scope>compile</scope>  

  49.         </dependency>  

  50.         <dependency>  

  51.             <groupId>org.konghao.user</groupId>  

  52.             <artifactId>user-log</artifactId>  

  53.             <version>0.0.1-SNAPSHOT</version>  

  54.             <type>jar</type>  

  55.             <scope>compile</scope>  

  56.             <exclusions>  

  57.                 <exclusion>  

  58.                     <groupId>log4j</groupId>  

  59.                     <artifactId>log4j</artifactId>  

  60.                 </exclusion>  

  61.             </exclusions>  

  62.         </dependency>  

  63.          <dependency>  

  64.             <groupId>org.hibernate</groupId>  

  65.             <artifactId>hibernate-core</artifactId>  

  66.             <version>3.6.10.Final</version>  

  67.         </dependency>  

  68.         <dependency>  

  69.             <groupId>log4j</groupId>  

  70.             <artifactId>log4j</artifactId>  

  71.             <version>1.2.16</version>  

  72.         </dependency>  

  73.         <dependency>  

  74.             <groupId>mysql</groupId>  

  75.             <artifactId>mysql-connector-java</artifactId>  

  76.             <version>5.1.18</version>  

  77.         </dependency>  

  78.         <dependency>  

  79.             <groupId>org.slf4j</groupId>  

  80.             <artifactId>slf4j-log4j12</artifactId>  

  81.             <version>1.6.4</version>  

  82.         </dependency>  

  83.         <dependency>  

  84.             <groupId>javassist</groupId>  

  85.             <artifactId>javassist</artifactId>  

  86.             <version>3.12.1.GA</version>  

  87.         </dependency>  

  88.         <dependency>  

  89.             <groupId>commons-logging</groupId>  

  90.             <artifactId>commons-logging</artifactId>  

  91.             <version>1.1.1</version>  

  92.         </dependency>  

  93.     </dependencies>  

  94.   </dependencyManagement>  

  95. </project>  

<project
xmlns=”http://maven.apache.org/POM/4.0.0
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd“>
<modelVersion>4.0.0</modelVersion>
<groupId>org.konghao.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging> <modules>
<module>../user-core</module>
<module>../user-dao</module>
<module>../user-log</module>
<module>../user-service</module> </modules>
<url>http://maven.apache.org</url>;
<!– <repositories> <repository>
<id>central</id> <name>Central Repository</name>
<url>https://nexus.sourcesense.com/nexus/content/repositories/public/%3C/url%3E;
<layout>default</layout> <snapshots>
<enabled>false</enabled> </snapshots>
</repository> </repositories> –> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.10</junit.version> </properties>
<dependencyManagement> <dependencies> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope> </dependency> <dependency>
<groupId>org.konghao.user</groupId>
<artifactId>user-core</artifactId>
<version>0.0.1-SNAPSHOT</version> </dependency>
<dependency> <groupId>org.konghao.user</groupId>
<artifactId>user-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type> <scope>compile</scope>
</dependency> <dependency>
<groupId>org.konghao.user</groupId>
<artifactId>user-log</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type> <scope>compile</scope>
<exclusions> <exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId> </exclusion>
</exclusions> </dependency> <dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.10.Final</version> </dependency>
<dependency> <groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version> </dependency>
<dependency> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version> </dependency>
<dependency> <groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version> </dependency>
<dependency> <groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.12.1.GA</version> </dependency>
<dependency> <groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version> </dependency>
</dependencies>
</dependencyManagement></project>

user-core的pom文件

[html] view
plain
copyprint?图片 15图片 16

  1. <project xmlns=”http://maven.apache.org/POM/4.0.0” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”  

  2.   xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0%C2%A0http://maven.apache.org/xsd/maven-4.0.0.xsd“>  

  3.   <modelVersion>4.0.0</modelVersion>  

  4.   <parent>  

  5.     <groupId>org.konghao.user</groupId>  

  6.     <artifactId>user-parent</artifactId>  

  7.     <version>0.0.1-SNAPSHOT</version>  

  8.     <relativePath>../user-parent/pom.xml</relativePath>  

  9.   </parent>  

  10.   <artifactId>user-core</artifactId>  

  11.   <name>user-core</name>  

  12.   <dependencies>  

  13.     <dependency>  

  14.       <groupId>junit</groupId>  

  15.       <artifactId>junit</artifactId>  

  16.     </dependency>  

  17.    <dependency>  

  18.         <groupId>org.hibernate</groupId>  

  19.         <artifactId>hibernate-core</artifactId>  

  20.     </dependency>  

  21.     <dependency>  

  22.         <groupId>log4j</groupId>  

  23.         <artifactId>log4j</artifactId>  

  24.     </dependency>  

  25.     <dependency>  

  26.         <groupId>mysql</groupId>  

  27.         <artifactId>mysql-connector-java</artifactId>  

  28.     </dependency>  

  29.     <dependency>  

  30.         <groupId>org.slf4j</groupId>  

  31.         <artifactId>slf4j-log4j12</artifactId>  

  32.     </dependency>  

  33.     <dependency>  

  34.         <groupId>javassist</groupId>  

  35.         <artifactId>javassist</artifactId>  

  36.     </dependency>  

  37.   </dependencies>  

  38. </project>  

<project
xmlns=”http://maven.apache.org/POM/4.0.0
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd“>
<modelVersion>4.0.0</modelVersion> <parent>
<groupId>org.konghao.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../user-parent/pom.xml</relativePath>
</parent> <artifactId>user-core</artifactId>
<name>user-core</name> <dependencies>
<dependency> <groupId>junit</groupId>
<artifactId>junit</artifactId> </dependency>
<dependency> <groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId> </dependency>
<dependency> <groupId>log4j</groupId>
<artifactId>log4j</artifactId> </dependency>
<dependency> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId> </dependency>
<dependency> <groupId>javassist</groupId>
<artifactId>javassist</artifactId> </dependency>
</dependencies></project>

其他子项目标pom文件类似与user-core

借助于分析

可在类型的根路径下运行maven命令,分析当前项目标依靠意况

mvn dependency:list  显示已解析重视

mvn dependency:tree   依赖树

mvn dependency:analyze  正视分析      需求关心Used undeclared
dependencies
found(项目中采用到的,但从没直接注脚的,传递性正视过来的),要求出示申明那么些正视

图片 17