Maven简介

定义:maven是一个通过配置依赖关系进行自动化构建的工具,并且能够有效管理jar包。

基本原理

工程通过依赖文件(pom.xml的规则去引用(jar包没有复制到工程目录内,只是一个jar包路径的引用仓库内的jar包,在有外网的情况下,

本地仓库中找不到的jar包会从中央仓库去下载。

maven 镜像源设置 maven镜像的作用_操作系统

说明:

私服用于局域网内,为局域网内的所有用户提供jar仓库,通过配置,用户先去访问私服,私服中没有找到的话,私服会作为代理去中央仓库

下载到私服。应用于:一个公司内开发团对,便于统一管理各开发人员使用的jar包

仓库镜像就是一个远程仓库的一个映射仓库,在国内来说,意义上相当于代理的作用。比如中央仓库因为服务器在国外,又因为某些不可描述的

原因,所以国内开发人员从中央仓库中下载的依赖包会因为各种各样的网络因素导致错误或则下载十分缓慢。所以这时候镜像的作用的显现出来了。 

可以说,镜像就是国外公共仓库的网络加速器,也可以说镜像是国外仓库在国内的版本。(原文: )

pom坐标

 定义:通过groupId、artifactId、version等参数去定位仓库中jar包的位置.

如:



<dependency>
    <groupId>com.ljm.maven</groupId>
    <artifactId>junit</artifactId>
    <version>4.0</version>
    <scope>test</scope>
</dependency>



 

上面依赖中有坐标和作用范围,范围为测试阶段有效

本地仓库默认位置为 C:\Users\Administrator\.m2\repository

修改本地仓库位置(可选):通过配置maven根据内的settings.xml文件内容

我的仓库位置:<localRepository>H:\server\repository</localRepository>

根据三个参数groupId、artifactId、version可以得到jar在仓库中位置:

仓库位置/com/ljm/maven/junit/4.0/junit-4.0.jar

 

目录结构

maven 镜像源设置 maven镜像的作用_maven_02

 

 安装maven

 ①官网下载一个maven压缩包,解压到本地(我用的是3.6.0)

maven 镜像源设置 maven镜像的作用_java_03

 

 ②配置maven环境变量

  右键我的电脑->点击属性

  

maven 镜像源设置 maven镜像的作用_java_04

 

建议设置在用户变量中

1.新建一个变量名为M2_HOME(也可以用MAVEN_HOME,但是M2_HOME能够兼容老版本),值为maven的安装目录,

我的是:H:\server\apache-maven-3.6.0

2.在Path中添加maven下bin的路径,我的:H:\server\apache-maven-3.6.0\bin

3.配置完成

maven 镜像源设置 maven镜像的作用_开发工具_05

 

 ③检查安装结果:

  命令窗口输入mvn -v  , 产生如下结果表示安装成功

     

maven 镜像源设置 maven镜像的作用_java_06

应用maven

准备工作

配置maven项目自动创建的jre版本(默认是JavaSe-1.5)

   配置maven安装目录apache-maven-3.6.0\conf下的settings.xml文件,添加如下配置(不能重复相关配置)

<profile>
     <id>jdk-1.7</id>
     <activation>
       <activeByDefault>true</activeByDefault>
       <jdk>1.7</jdk>
     </activation>
     <properties>
       <maven.compiler.source>1.7</maven.compiler.source>
       <maven.compiler.target>1.7</maven.compiler.target>
       <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
     </properties>
   </profile>

 配置完成后创建的maven工程会自动创建JavaSe-1.5,如下:

maven 镜像源设置 maven镜像的作用_开发工具_07

②eclipse中添加创建maven工程的快捷方式(默认没有)

 

maven 镜像源设置 maven镜像的作用_操作系统_08

 

 

   

maven 镜像源设置 maven镜像的作用_操作系统_09

   勾选

 

maven 镜像源设置 maven镜像的作用_java_10

 完成后即可在创建时看到创建maven项目的选项

 

maven 镜像源设置 maven镜像的作用_java_11

 

③配置eclipse中默认使用的maven工具(eclipse默认使用自带的maven插件)

 点击windows ,再点击preferences

 

maven 镜像源设置 maven镜像的作用_操作系统_12

 

 

maven 镜像源设置 maven镜像的作用_开发工具_13

创建过程

 JavaSE的maven工程

 创建maven project

maven 镜像源设置 maven镜像的作用_java_14

 

maven 镜像源设置 maven镜像的作用_maven 镜像源设置_15

工程建立后,产生pom坐标(在pom.xml中):

maven 镜像源设置 maven镜像的作用_开发工具_16

 

JavaWeb的maven工程

创建过程与JavaSE的maven工程创建过程基本相同,有几个地方应该注意:

①packaging选择war

② JavaWeb的maven工程默认的目录结构不是我们常用的web目录格式,需要进行配置:

默认创建的目录

maven 镜像源设置 maven镜像的作用_java_17

配置后的web目录

maven 镜像源设置 maven镜像的作用_开发工具_18

 

配置步骤:

右键工程名---点击Propertise---然后如下

maven 镜像源设置 maven镜像的作用_开发工具_19

 

 

maven 镜像源设置 maven镜像的作用_操作系统_20

maven 镜像源设置 maven镜像的作用_maven_21

ok后点击apply,需要更新一会后,目录webapp下结构发生变化

maven 镜像源设置 maven镜像的作用_maven 镜像源设置_22

 

 操作过程

 maven依赖范围

maven 镜像源设置 maven镜像的作用_操作系统_23

maven几种常用性质


①依赖传递

  • 只有compile范围内的依赖可以传递
  • 可传递的依赖在最底层声明一次即可,高层会自动引入(下图解释)

  

maven 镜像源设置 maven镜像的作用_maven 镜像源设置_24

 

②依赖排除:不希望得到传递的jar包

 方法如下:

 例如,在当前工程的pom.xml中,需要依赖servlet-api-2.5.jar,但是不想要servlet-api-2.5.jar依赖的commons-ligging.jar(阻止它传递)

 

maven 镜像源设置 maven镜像的作用_操作系统_25

 

③依赖原则

路径就近原则:

 路中可以看出log4-1.2.17.jar由B依赖,工程B离工程C更近,所以工程C在二者中选择了引入依赖log4-1.2.17.jar

说明图:

 

maven 镜像源设置 maven镜像的作用_操作系统_26

 

实践图:

 

 

maven 镜像源设置 maven镜像的作用_maven 镜像源设置_27

 

 

maven 镜像源设置 maven镜像的作用_开发工具_28

 

 

声明顺序优先原则:

后声明的依赖优先。如图:

对同一类jar包,后声明的依赖会覆盖先声明的依赖

  

maven 镜像源设置 maven镜像的作用_java_29

拓展:在一个pom.xml中可以声明一个全局变量来统一管理,例如:

 

maven 镜像源设置 maven镜像的作用_maven 镜像源设置_30

④继承

 通过父工程对子工程的jar包统一管理,保证一致性。

 

maven 镜像源设置 maven镜像的作用_maven 镜像源设置_31

 解决方案:在父工程中统一规定jar包依赖。

第一步:以pom方式创建maven项目

 

maven 镜像源设置 maven镜像的作用_开发工具_32

第二步:父工程中统一规定依赖,子工程中取消版本号和重复的语句

 



<!--  父工程pom.xml中配置-->
<dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.12</version>
              <scope>test</scope>
          </dependency>
      </dependencies>
</dependencyManagement>

<!--  子工程pom.xml中配置-->
 <parent>
      <groupId>com.ljm.maven</groupId>
      <artifactId>project03</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <relativePath>../project03/pom.xml</relativePath>   //父工程pom.xml相对该文件的位置
  </parent>
  
  <dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
  </dependencies>



 

 配置后效果:

maven 镜像源设置 maven镜像的作用_操作系统_33

 

⑤聚合

  以pom方式对多个模块统一安装,安装后会存入本地仓库

  • 以pom方式创建maven项目
  • 在用户指定的父工程中进行一键打包

聚合配置:在父工程的pom.xml指定需要聚合的工程即可

       



<modules>
      <module>../project01</module>
      <module>../project02</module>
  </modules>



 

  启动一键安装:右键父工程的pom.xml文件,点击run as ,再选择maven install

 

部署方式(步骤较多,大致思路)

手动部署:

将整个web工程打包为war文件,然后移到tomcat的webapps目录下,最后用命令启动tomcat即可。

eclipse自动部署

通过eclipse工具,自动发布到tomcat服务器上即可

maven自动部署

用maven部署在工程中pom.xml配置以下代码:



<build>
        <finalName>AtguiguWeb</finalName>
        <plugins>
            <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>1.2.3</version>
                <configuration>
                    <container>
                        <containerId>tomcat6x</containerId>
                        <home>D:\DevInstall\apache-tomcat-6.0.39</home>
                    </container>
                    <configuration>
                        <type>existing</type>
                        <home>D:\DevInstall\apache-tomcat-6.0.39</home>
                        <!-- 如果Tomcat端口为默认值8080则不必设置该属性 -->
                        <properties>
                            <cargo.servlet.port>8989</cargo.servlet.port>
                        </properties>
                    </configuration>
                </configuration>
                <executions>  
                    <execution>  
                        <id>cargo-run</id>  
                        <phase>install</phase>  
                        <goals>  
                            <goal>run</goal>  
                        </goals>  
                    </execution>  
                </executions>
            </plugin>
        </plugins>
    </build>



 

用maven在eclipse上进行自动部署时,只能开启服务器,不能直接关闭(需要另外用命令窗口关闭)。

不建议使用,因为eclipse部署比较方便。