maven学习笔记

maven

什么是maven?其实就是一个包管理器,或者说是工程管理器,在大型工程中是很好用的一个东西。至于怎么安装maven,还有怎么配置,就不在这里说了,在eclipse相关的知识点那里有简单写过这方面的内容,这里主要说maven的操作。

一、maven基本使用

A.maven项目工程文件

Project
    |-src
    |   |-main
    |   |   |-java              --存放项目的.java文件
    |   |   |-resources         --存放项目的资源文件,比如spring的配置文件
    |   |   |-webapp            --web工程的主目录
    |   |   |   |-WEB-INF
    |   |   |   |   |-web.xml
    |   |-test                  
    |   |   |-java              --存放所有测试.java文件,如JUnit测试类
    |   |   |-resources         --存放资源文件
    |-target                    --目标文件输出的位置,如.class/.jar/.war
    |-pom.xml                   --maven项目的核心配置文件

B.maven基本操作

cmd窗口:
cd到maven工程目录里面,

  1. mvn tomcat:run
    用mvn tomcat:run 就可以运行一个web的maven工程了
  2. mvn compile
    主要是把src/main/java里的.java文件编译为.class文件,放在target目录下
  3. mvn test
    主要是执行src/test/java下的单元测试类,其实是编译并执行
  4. mvn clean
    主要是起到清理作用,把target目录下的所有内容清理
  5. mvn package
    主要是把maven工程打包为一个jar包或者war包,一般都是打包为jar包
  6. mvn install
    把工程安装到本地仓库,那样就可以提供给其他工程调用依赖了

*执行顺序:compile->test–>package–>install(后面包含前面的命令了)
为什么会这样子呢?因为maven生命周期。*

C.maven生命周期

  1. clean生命周期:clean
  2. default生命周期:compile、test、package、install、deploy(发布到私服)
  3. site生命周期:site(生成一个项目站点说明文档)

注意:不同的生命周期的命令可以同时执行
比如:mvn clean package

D.在eclipse里面使用maven

  1. 首先要配置好maven插件,然后就可以新建maven project,注意要选择创建一个simple project,然后把相关内容填好。
  2. 如果创建的是war包,会有一个红色的叉,这是由于缺少web.xml文件引起的。
  3. 对于这个问题可以手动创建一个,路径中的其他文件夹也要相应创建,或者右键工程->选择java EE Tools->Genelate Deployment...

具体选项内容这里不多说了,这时就已经建好一个基本的maven工程了

E.为maven工程添加插件或者依赖

  1. 插件:通常是指像tomcat运行环境插件或者jdk编译器插件,这类型的东西;
  2. 依赖:通常是指我们普通工程lib里面放的jar包

添加方法:
添加依赖:右键pom文件->maven->add dependency,在添加依赖的时候会自动把该依赖依赖的所有jar都添加进来,所以像添加struts2这种框架的时候只需要添加核心包就可以了,其他的包会自动添加进来。
添加插件:右键pom文件->maven->add plugin

通常添加好之后有些参数还要自己配置,下面是我配置的jdk和tomcat版本:

            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>3.5.1version>
                <configuration>
                    <source>1.8source>
                    <target>1.8target>
                    <encoding>UTF-8encoding>
                configuration>
            plugin>
            
            <plugin>
                <groupId>org.apache.tomcat.mavengroupId>
                <artifactId>tomcat7-maven-pluginartifactId>
                <version>2.2version>
                <configuration>
                    <port>8888port>
                    <path>/hello_homepath>
                configuration>
            plugin>

用这种方法添加依赖和插件,执行完上面的步骤之后,就有个窗口弹出来,我们只要把相关信息输进去就可以了,不过现在是需要输完整信息的,那就会挺麻烦的,因为有些依赖的名字还是很长的,那有没有方法让它自动关联呢?有,那就是建立仓库索引。


建立仓库索引:
点击window->show view->other->在输入框输入maven repository,这时就可以打开maven仓库视图了;
在maven仓库视图里我们可以找到local repositories,打开它->右键它里面的 local repository->rebuild index。
这时就已经建好索引了,以后添加插件或者依赖的时候就会自动关联。


E.执行maven工程

像执行普通工程那样找到run as->maven build…(有…),然后在弹出窗口的goals输入框输入tomcat7:run(如果配置的是tomcat7,就这样子执行)

二、maven进阶

1.依赖范围

在添加依赖的时候有个选项是scope,这就是依赖范围选项
依赖范围分四个级别:
1. compile:编译时需要,测试时需要,运行时需要,打包时需要,默认选择,一般的jar都是这个;
2. provided:编译时需要,测试时也需要 ,运行时不需要,打包时不需要,jsp和servlet的api的jar是这个;
3. runtime:编译时不需要,测试时需要,运行时需要,打包时需要,数据库驱动包;
4. test:编译时不需要,测试时需要,运行时不需要,打包也不需要,junit.jar和与之类似相关的包。

2.依赖冲突

所谓依赖冲突就是由于在添加两个框架的时候,由于这连个框架都会自动添加依赖进来,但是有些时候,他们所添加的是同一个名字的依赖,但是版本不同,这时候就会产生依赖冲突的问题了。

依赖冲突有四种解决方法:

  1. 第一声明优先原则:就是发生冲突时,那个声明在前面就使用哪个;
  2. 路径近者优先原则:发生冲突的时候,相比自动添加进来的依赖,优先使用自己手动声明的依赖;
  3. 排除原则:在声明某些依赖的时候,在声明里面排除一些依赖,不给它自动添加进来,如下:
    <dependency>
        <groupId>org.apache.strutsgroupId>
        <artifactId>struts2-spring-pluginartifactId>
        <version>2.3.24version>
        <exclusions>
          <exclusion>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-beansartifactId>
          exclusion>
        exclusions>
    dependency>
  1. 版本锁定原则,这种方法最常见,就是在一开始就固定所有依赖的版本号,后面的依赖全部都不需要写版本号了,如下:
    
    <properties>
        <spring.version>4.2.4.RELEASEspring.version>
        <hibernate.version>5.0.7.Finalhibernate.version>
        <struts.version>2.3.24struts.version>
    properties>

    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-contextartifactId>
                <version>${spring.version}version>
            dependency>
            <dependency>
                <groupId>org.hibernategroupId>
                <artifactId>hibernate-coreartifactId>
                <version>${hibernate.version}version>
            dependency>
            dependency>
                <groupId>org.apache.strutsgroupId>
                <artifactId>struts2-coreartifactId>
                <version>${struts.version}version>
            dependency>
        dependencies>
    dependencyManagement>

你可能感兴趣的:(maven,javaEE)