Maven笔记

2018-06-29 06:16:55来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

一.Maven的概念及作用

1.Maven本质上是一个项目对象模型(POM),是一个基于java平台的自动化构建工具(编译-测试-打包-部署->自动构建),也是项目管理工具.

2.Maven的设计核心:约定优于配置(convention over configuration),这也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需要做的决定的数量,获得简单的好处,而又不失灵活性.

3.Ant和Maven一种是命令式,一种是声明式.Ant需要我们指明各种动作,以及执行这些动作的顺序,比如编译代码,测试代码等.而Maven则默认大家都知道有各种动作,默认大家都遵守一个良好的目录结构,一个通用的构建过程.因此,使用Maven时我们只需要告诉Maven我们希望构建什么,而不需要告诉它如何构建.因为Maven已经在构建生命周期,阶段和目标中定义好了,我们要做的就是编写声明式的pom.xml文件.Gradle结合以上两个的优点,继承了Ant的灵活和Maven的生命周期管理,它被google作为了Android御用管理工具.它不用XML作为配置文件格式,采用了DSL格式,使得脚本更加简洁.Gradle引入了基于Groovy语言的DSL语法来代替XML配置,因此它的配置文件是一个Groovy文件.Gradle还把Maven的设计核心(Convention Over Configuration)发扬光大,而Gradle的配置即代码又超越了Maven.在Gradle中任何配置都可以作为代码被执行的,我们也可以随时使用已有的Ant脚本,Java类库,Groovy类库来辅助完成构建任务的编写.

4.完整的Maven项目构建过程包括:
  清理:删除上次编译的结果,为重新编译做准备.
  编译:java->class.
  测试:针对于项目中的关键点进行测试,也可以用项目中的测试代码去测试开发代码.
  报告:将测试的结果进行显示.
  打包:将项目中包含的多个文件压缩成一个文件,用于安装或部署(java->jar,web项目->war).
  安装:将打成的包放到本地仓库(本地仓库里没有想要的jar包就去远程仓库(中央仓库,中央仓库镜像,私服nexus)下载,中央仓库镜像就是对中央仓库的分流).
  部署:将打成的包放到服务器上准备运行.

5.Maven通过坐标对项目所依赖的jar包进行统一规范管理.

6.管理jar包:

I.在pom.xml中添加依赖可以添加第三方jar包(在这个网址中搜索想要的jar包名称:http://mvnrepository.com/).
II.jar包之间的依赖关系(自动下载并关联所有jar包,且不会冲突).

7.如果项目非常庞大,就不适合使用package来划分模块,一个模块对应一个工程才利于分工协作.借助于maven就可以将一个项目拆分成多个工程.

8.Maven的约定目录结构:

I.main->执行项目,test->测试项目,两个目录下都有java和resources(java:java代码,resources:资源代码/配置代码).
II.target:用于存放编译,打包后的输出文件.
III.pom.xml:项目对象模型
<groupId>域名反转.大项目名</groupId>
<artifactId>子模块名</artifactId>
<version>版本号</version>


二.下载配置Maven
  1.下载地址:http://maven.apache.org/download.cgi

  2.Binary二进制,source源代码,含有gz的是Linux,zip的是Windows.

  3.配置Maven之前先配置jdk(java的运行需要jdk,我安装的是1.7版本的):
    I.点击我的电脑->系统属性->高级系统设置->环境变量->新建JAVA_HOME变量,变量值填写jdk的安装目录(例如E:\Java\jdk1.7).
    II.寻找Path变量->在变量值最后输入%JAVA_HOME%\bin;(如果是第一次配置环境变量,先在这条语句复制粘贴前检查一下path里面已有的语句末尾是否有英文状态的分号,没有就加上).
    III.新建CLASSPATH变量->变量值填写.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面的那个点和分号也要一起复制过去).

  4.配置Maven:
    I.新建MAVEN_HOME变量,变量值填写Maven的安装路径(例如F:\Maven).
    II.再把%MAVEN_HOME%\bin;加入到Path里.

  5.最后分别输入java,javac,mvn -v(横杠前面有一个空格),看看是否每次输入都会出来一大段英文,出来了就算成功.

  6.配置本地仓库:默认本地仓库为C:\Users\BiggestKing(你的电脑管理员名称)\.m2\repository,可以进入到Maven的安装目录里面的conf\settings.xml中修改默认本地仓库路径(<localRepository>F:/MavenRepository(名字可以随便取)</localRepository>).

  7.在编辑器中配置Installations,点击add选择安装maven的目录.

  8.在编辑器中配置User Settings,找到安装maven的目录下的conf下的settings.xml.


三.使用Maven
  1.打开编辑器->右击->New->点击Other...或者Project...搜索Maven->找到Maven Project并点击.

  2.在新建Maven Project的第一个页面要勾选Create a simple project(网络不好可能导致maven项目创建后报错(CoreException: Could not get the value for parameter compilerId for plugin execution default-compile...),因为需要的东西没能全部下载完成).

  3.Maven的继承:
    I.建立父工程,并且父工程的打包方式(Packaging)为pom.
    II.在父工程的pom.xml中编写依赖:
    <dependencyManagement>
      <dependencies>
        <dependency>...</dependency>
      </dependencies>
    </dependencyManagement>
    dependencies和dependencyManagement的区别在于:前者,即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项.后者,如果在子项目中不写该依赖项,那么子项目中是不会从父项目继承该依赖项的,只有在子项目中写了该依赖项,才会从父项目中继承该项,并且version和scope都读取自父项目.
    III.在子工程的pom.xml中写:
      a.父工程的<groupId>域名反转.大项目名</groupId>
        <artifactId>子模块名</artifactId>
        <version>版本号</version>
      b.当前工程的pom.xml到父工程的pom.xml之间的相对路径.
      <parent>
        <groupId>域名反转.大项目名</groupId>
        <artifactId>子模块名</artifactId>
        <version>版本号</version>
        <relativePath>../父工程名称/pom.xml</relativePath>
      </parent>
    IV.在子工程的pom.xml中需要声明使用那些父工程的依赖.

  4.Maven的聚合:
    I.Maven项目能够识别的:自身包含,本地仓库中的.
    II.A依赖于B,则在执行时,必须先将B加入到本地仓库中.
    III.聚合的使用:
      a.在一个总工程中配置聚合,只能配置在打包方式为pom的Maven项目中.
      <modules>
        <!-- 项目的根路径 -->
        <module>../项目名称</module>
        <module>../项目名称</module>
      </modules>
      b.配置完聚合后,只要操作总工程则会自动操作聚合中配置的工程.
    IV.Maven将一个大工程拆分陈若干个子工程,聚合可以将多个子工程合起来.

  5.部署maven:
    I.打war包到tomcat/webapps目录.
    II.maven命令:deploy.

    III.配置cargo,pom.xml中的属性信息:

    <build>

      <finalName>子模块名称</finalName>
      <plugins>
        <plugin>
          <groupId>org.codehaus.cargo</groupId>
          <artifactId>cargo-maven2-plugin</artifactId>
          <version>1.6.4</version>
          <configuration>
            <container>
              <containerId>tomcat8x</containerId>
              <home>E:\apache-tomcat-8.0.36-windows-x64\caf-tomcat-8.0.36</home>
            </container>
            <configuration>
              <type>existing</type>
              <home>E:\apache-tomcat-8.0.36-windows-x64\caf-tomcat-8.0.36</home>
            </configuration>
          </configuration>
          <executions>
            <execution>
              <id>cargo-run</id>
              <phase>install</phase>
              <goals>
                <goal>run</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>

  6.在编辑器中编写完pom.xml后,需要update.

  7.第一次执行Maven项目需要点击Maven build...,然后在Goals一栏输入命令,最后run起来,之后再执行可以直接点击Maven build,这玩意保存了上次在Maven build...里输入的命令(像clean,install,test这三个命令已经有了也可以直接点击,不用在Maven build...里输入命令).

 

四.执行maven
  1.必须在pom.xml所在的目录中执行.

  2.maven常用命令(cmd中可执行):
    I.mvn compile 编译main目录下的java文件.
    II.mvn test-compile 编译测试程序.
    III.mvn test 测试.
    IV.mvn report 报告测试程序执行的结果.
    V.mvn package 打包成jar/war.
    VI.mvn install 将开发的模块放入本地仓库,供其他模块使用.
    VII.mvn clean 删除target目录(编译文件的目录).
    VIII.mvn deploy 部署项目.


五.依赖:A中的某些类需要使用B中的某些类,则称之为A依赖B.在maven项目中如果要使用一个当时不存在的jar或模块,可以通过依赖实现(去本地仓库或中央仓库找).
  1.compile(支持compile,test,run,默认) test(支持test) provided(支持compile,test) runtime(支持test,run) system(支持compile,test).

  2.maven在编译,测试,运行项目时各自使用一套classpath.

  3.依赖排除:当我们只需要A.jar不需要B.jar,就需要用到依赖排除.
  <exclusions>
    <exclusion>
      <groupId></groupId>
      <artifactId></artifactId>
    </exclusion>
    <exclusion>
      <groupId></groupId>
      <artifactId></artifactId>
    </exclusion>
    ......
  </exclusions>

  4.依赖的传递性:如果A.jar依赖于B.jar依赖于C.jar,那么也可以说A.jar依赖于C.jar(仅当B.jar依赖于C.jar的范围是compile).

  5.依赖的原则:
    I.在同一个pom.xml文件中有2个相同的依赖,后面的依赖会覆盖前面的依赖.
    II.在不同的pom.xml文件中有2个相同的依赖,先声明的依赖会覆盖后声明的依赖.


六.maven的生命周期
  1.生命周期和构建的关系:生命周期中的顺序:a,b,c,当我们执行c时,实际执行的是a,b,c.

  2.生命周期包含的三个阶段:
  I.clean lifecycle:清理
    pre-clean clean post-clean.
  II.default lifecycle:默认
    有很多,常用的有test-compile test package install.
  III.site lifecycle:站点
    pre-site site post-site site-deploy.


七.统一JDK版本(JDK只能够识别source folder中的源码)
  1.右键->Properties->build path->Libraries->删除原本的Library->add Library->JRE System Library->第二个选项选择JDK.

  2.右键->Properties->Project Facets->java verson.

  3.通过maven改JDK版本
  <profiles>
    <profile>
      <id>jdk-17</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.7</jdk>
      </activation>
      <properties>
        <maven.compiler.source></maven.compiler.source>
        <maven.compiler.target></maven.compiler.target>
        <maven.compiler.compilerVersion></maven.compiler.compilerVersion>
      </properties>
    </profile>
  </profiles>

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Maven安装配置环境变量及eclipse的配置

下一篇:Netty 系列三(ByteBuf).