maven 初体验

Maven 是一个项目管理和构建工具

Maven是基于项目对象模型(pom),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。

---------------------------------------------------------------------------


Maven :

Bin目录:包含mvn命令运行的脚本

Boot :包含一个类加载器的框架,maven用它来加载自己的类库

Conf :配置文件

Libmaven运行依赖的类库

----------------------------------------------------------------------------

maven的目录结构:

Maven的目录结构

Src(源代码目录)

   -main

         -java

                -package

   -test

         -java

                -package

   -resource(存放资源文件)

------------------------------------------------------------------------------------------

Maven中的基础知识

Mvn �Cv 查看maven版本

 mvn   -compile 编译

 mvn    -test测试

mvn      -package 打包

 Mvn �Ccleany用来删除target(项目经过编译的字节码文件和测试报告)文件

  mvn           -install安装jar到本地仓库中可以将jar包发布到本地仓库中

我们通过mvn  �Ccompile这个命令来编译源代码,如果在编译的过程中程序用到了其他的支持包,他会去pom.xml查找是否引入该依赖包的坐标,如果引入了,那么maven会先按照在dependency的坐标到本地仓库中去找,如果有,maven将会把该jar加载到该项目classpath中,如果没有找到该jar包,会按照网上的地址到maven的中央仓库去找并且下载,下载到本地仓库,供我们的项目进行使用,如果中央仓库也找不到就会报错

----------------------------------------------------------------------------------------------

常用的构建命令的框架

自动创建目录骨架(maven提供了archetype插件,用于创建符合maven规定的目录骨架)

创建目录的两种方式:

1.      archetypegenerate 按照提示进行选择

2.      archetypegenerate �CDgroupId=组织名

-DartifactId=

-Dversion=版本号

-Dpackage=代码所存在的包

 

Maven中赋坐标和仓库:(所有构建通过坐标做为其唯一标识)

坐标:groupId,artifactId(项目名和模块名),version

仓库:用来管理项目的依赖,仓库分为本地仓库,远程仓库,maven所有的pom.xml都会继承一个超级的pom.xmllib下的maven-model-builder.3.3.3.jar里面的pom.xml,url标签里的地址就是中央仓库的地址(包含了绝大多数的开源jar

 

镜像仓库:(镜像就是a提供和b一样的功能)maven的中央仓库的服务器在国外,有时可能无法访问外网,但是国内有它的镜像仓库。

如何修改镜像仓库位置,

Maven Conf下的settings文件修改mirror

如何更改本地仓库的位置:修改settings,找到localRepository,把路径放进去即可

-------------------------------------------------------------------------------------------------

 

eclispse中装maven插件,加载好插件后,建立一个maven项目,

步奏为new-maven project-next-选择。。。quickstart,next填写groupId,artifactId,version,

运行项目:选中Pom.xml右键run as      maven build,goals里面输入maven命令:如compile编译项目,package,打包项目(在项目的target目录下:class文件,测试报告,jar文件)

--------------------------------------------------------------------------------------------------


maven的生命周期

Maven的生命周期

完整的项目构建过程:清理,编译,测试,打包,集成测试,验证,部署

Maven生命周期:(定义了三套相互独立的生命周期,每个生命周期中又包括一些阶段,其阶段是有顺序的,且后面的阶段依赖前面的阶段,执行某个阶段时,其前面的阶段会顺序执行,但不会触发另外两套生命周期的任何阶段,例如运行compile这个阶段时,packagetest会自动的执行)

Clean:清理项目

Default:构建项目

Site:生成项目站点

 

(1)      clean清理项目

阶段:pre-clean  执行清理前的工作,

             Clean  清理上一次构建生成的所有文件,

             Post-clean执行清理后的工作,

        2Default:构建项目

               常用的阶段:compile,test,package,install(在运行package这个阶段时,是先运行compiletest阶段的)

          (3) Site:生成项目站点

               Pre-site:生成项目站点前要完成的工作

Site:生成项目站点文档

Post-site:生成项目站点后要完成的工作

Site-deploy:发布生成站点到服务----------------------------------------------------------------------------------

Pom.xml常用元素

<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><!-- 指定了当前pom的版本 -->

  <!-- 坐标元素 -->
  <groupId>com.imooc.hi</groupId><!-- 反写的公司网址+项目名 -->
  <artifactId>hi</artifactId><!-- 项目名+模块名  例如 struts2_01 -->
  <version>0.0.1-SNAPSHOT</version><!-- 版本号:一般由三个数字组成,第一个表示大版本号,第二个表示分支版本号,第三个表示小版本号 -->
  <packaging>jar</packaging><!-- maven项目的打包方式,默认是jar -->

  <name>hi</name><!-- 项目的描述名,产生项目文档时会使用 -->
  <url>http://maven.apache.org</url><!-- 项目的地址 -->
  <description></description><!-- 项目的描述 -->
  <developers></developers><!-- 开发人员 -->
  <licenses></licenses>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

 <!-- 依赖列表 -->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope><!-- 依赖的范围,junit的jar只在我们的测试的依赖范围内有用 -->
      <!--maven提供的三种classpath值:编译,测试,运行,
        依赖的范围就是用来控制依赖与三种classpath的关系的,scope的属性compile(默认的,对于三种classpath都有效),test(测试范围有效,如junit),
        runtime(测试和运行有效,如jdbc的驱动实现)
        ,system(编译和测试有效,与本地系统相关联),import(只用于dependencyManagement,表示从其他pom继承过来的依赖),
        provided(编译和测试有效,如当我们构建一个web项目时,
        编译和测试时可以依赖 servlet API,运行时并不会被加入,因为web容器已经包含servlet API),具体查看maven官网文档
     -->
       
      <optional></optional><!-- true 和false用来设置依赖是否可选,默认是false,如果是false,子项目默认是继承的 -->
      <exclusions><!-- 排除依赖传递的列表 -->
        <exclusion></exclusion><!-- 比如a依赖b,b依赖c,那么c对于a来说就是传递依赖,如果a不想依赖c,就可以使用这个标签 -->
        <!--  -->
        
      </exclusions>
    </dependency>
  </dependencies>
  <!-- 依赖的管理,它不会被运行 ,不会被引入到实际的依赖中,主要是定义在父模块中,供子模块所继承用的,即公共的 -->
  <dependencyManagement>
     <dependencies></dependencies>
  </dependencyManagement>
  <!--  ,对构建的行为提供相应的支持-->
  <build>
    <!--  插件  -->
    <plugins>
        <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                  <!--  运行package命令时就能将source的源码打包,绑定source到default生命周期的package阶段 -->
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
        </plugin>
    </plugins>
  </build>
  <!-- 通常用于子模块中对父模块的pom的继承 -->
<!--   <parent></parent> -->
  <!-- 是用来聚合运行多个的maven项,如果有很多的maven模块需要编译,就不需要一个个编译 -->
  <modules></modules>
</project>


------------------------------------------------------------------------------------------------

依赖的范围scope

maven提供的三种classpath值:编译,测试,运行,
        依赖的范围就是用来控制依赖与三种classpath的关系的,scope的属性compile(默认的,对于三种classpath都有效),test(测试范围有效,如junit),
        runtime(测试和运行有效,如jdbc的驱动实现)
        ,system(编译和测试有效,与本地系统相关联),import(只用于dependencyManagement,表示从其他pom继承过来的依赖),
        provided(编译和测试有效,如当我们构建一个web项目时,
        编译和测试时可以依赖 servlet API,运行时并不会被加入,因为web容器已经包含servlet API),具体查看maven官网文档


------------------------------------------------------------------------------------------------------

依赖冲突:短路优先,例如:

A->B->C->X(jar)

A->D->X(jar)这个会优先解析

 

在依赖路径长度相同的情况下,先声明dependency先优先

------------------------------------------------------------------------------------------------------

聚合与继承

聚合:是用来聚合运行多个的maven项,如果有很多的maven模块需要编译,就不需要一个个编译

      <modules>
     <module>../hongxing-nage</module>
      <module>../hongxing-bge</module>
      <module>../hongxing-shanji</module>
  </modules>

继承:

 <parent>
        <groupId>com.hongxing</groupId>
        <artifactId>hongxing-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

----------------------------------------------------------------------------------------------------

使用maven构建web项目:

使用maven新建maven项目,发布到tomcat

  1.       首先在建立时选择maven-archetype-webapp



2.      导入servlet依赖

3.      检查classes文件的输出路径,项目输出路径在项目的target目录的classes(项目右键->bulidpath->config build path->source)


4.      将项目转换为web项目并添加文件夹构建maven目录结构:

项目右键->properties-project facets->dynamic web module(勾选)


5.      更改项目部署时的默认配置:

项目右键->properties->deployment Assemby-> (部署时不需要发布test文件,如果有,则移除)


6.添加tomcat


可以使用项目右键-run as �Cmaven build..-tomcat:run( clean package)启动tomcat服务

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.sj.webapp</groupId>
  <artifactId>webDemo2</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>webDemo2 Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
   
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>webDemo2</finalName>
    <plugins>
        <plugin>
             <groupId>org.apache.tomcat.maven</groupId>
             <artifactId>tomcat7-maven-plugin</artifactId>
             <version>2.2</version>
            <executions>
                <!-- 在打包成功后使用tomcat:run来运行tomcat服务 -->
                <execution>
                  <phase>package</phase>
                  <goals>
                    <goal>run</goal>
                  </goals>
                 </execution>
                
            </executions>
        </plugin>
    </plugins>
  </build>
</project>


你可能感兴趣的:(maven,依赖,scope)