Maven学习总结

1、定义;maven是apache软件基金会下的一款自动化构建工具,专注于服务Java平台上的项目构建和依赖管理。

2、Maven会先搜索本地仓库(repository),发现本地没有然后从远程仓库(中央仓库)获取。但中央仓库只有一个,最好从其镜象处下载。国内用阿里云下的服务器。

http://maven.aliyun.com/nexus/content/groups/public/  
   

也有通过nexus搭建的私服进行获取的(具体参考nexus的创建和连接)。

3、约定的目录结构

maven有三种打包方式:

jar:普通的jar项目

war:创建一个web项目

POM:

创建一个pom文件,管控版本号,其它的maven工程继承后就可以统一控制版本了,如下:

统一的依赖

<!-- 集中定义依赖版本号 -->
    <properties>
        <junit.version>4.12</junit.version>
        <spring.version>4.1.3.RELEASE</spring.version>
        <mybatis.version>3.2.7</mybatis.version>
        <mybatis.spring.version>1.2.2</mybatis.spring.version>
        </properties>
<!-- 在这里统一管理用到的版本号,这里并不是把jar包依赖进来 -->
    <dependencyManagement>
        <dependencies>
            <!-- 单元测试 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>

            <!-- Spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
</dependencies>

    </dependencyManagement>
<!-- dependencyManagement: 作用在使用到的时候,依赖进来即可,不依赖进来就不使用. -->

依赖

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

4、依赖:maven解析下述信息时会到本地仓库中根据坐标查找

①依赖信息的配置
<dependency>
    <groupId>com.atguigu.maven</groupId>
    <artifactId>Hello</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>
坐标: <groupId>:文件发行者信息的倒写
   <artifactId>:模块名字
  <version>:版本信息
SNAPSHOT:快照
RELEASE:正式版
范围:<scope>:依赖的范围,参数有以下三个
[compile][test][provide]

依赖的进阶:

(1)依赖的传递性:
在依赖的链条上,被依赖的工程如果依赖其他工程,那么链条中上面的工程就不必重复声明依赖了,Maven会自动导入。
(2)依赖传递的限制性 
compile范围的引入可以传递
test、provide范围的引入不可传递
对于不可传递的依赖只能在有需要的工程模块中单独引入

(3)依赖传递性的排除
(4)声明属性值
(5)依赖的原则

4、生命周期&&插件

(1)maven中有三个独立的生命周期

[1]Clean:清理
[2]Site:生成站点
[3]Default:默认

 (2)每个生命周期都有这个特点:

不管用户要求执行的命令对应生命周期中的哪一个阶段,Maven都会自动从当前生命周期的最初位置开始执行,直到完成用户下达的指令

以下生命周期&&插件的内容来源:http://www.cnblogs.com/luotaoyeah/p/3819001.html

一个完整的项目构建过程通常包括清理、编译、测试、打包、集成测试、验证、部署等步骤,Maven从中抽取了一套完善的、易扩展的生命周期。Maven的生命周期是抽象的,其中的具体任务都交由插件来完成。Maven为大多数构建任务编写并绑定了默认的插件,如针对编译的插件:maven-compiler-plugin。用户也可自行配置或编写插件。

4.1 . 三套生命周期

 clean、default、site,每个生命周期都包含了一些阶段(phase)。三套生命周期相互独立,但各个生命周期中的phase却是有顺序的,且后面的phase依赖于前面的phase。执行某个phase时,其前面的phase会依顺序执行,但不会触发另外两套生命周期中的任何phase。

4.1.1clean生命周期

  1. pre-clean    :执行清理前的工作;
  2. clean    :清理上一次构建生成的所有文件;
  3. post-clean    :执行清理后的工作

4.1.2default生命周期

default生命周期是最核心的,它包含了构建项目时真正需要执行的所有步骤。

  1. validate
  2. initialize
  3. generate-sources
  4. process-sources
  5. generate-resources
  6. process-resources    :复制和处理资源文件到target目录,准备打包;
  7. compile    :编译项目的源代码;
  8. process-classes
  9. generate-test-sources
  10. process-test-sources
  11. generate-test-resources
  12. process-test-resources
  13. test-compile    :编译测试源代码;
  14. process-test-classes
  15. test    :运行测试代码;
  16. prepare-package
  17. package    :打包成jar或者war或者其他格式的分发包;
  18. pre-integration-test
  19. integration-test
  20. post-integration-test
  21. verify
  22. install    :将打好的包安装到本地仓库,供其他项目使用;
  23. deploy    :将打好的包安装到远程仓库,供其他项目使用;

4.1.3site生命周期

  1. pre-site
  2. site    :生成项目的站点文档;
  3. post-site
  4. site-deploy    :发布生成的站点文档

4.2Maven的插件

Maven的核心文件很小,主要的任务都是由插件来完成。定位到:%本地仓库%orgapachemavenplugins,可以看到一些下载好的插件:

Maven官网上有更详细的官方插件列表:

 

4.2.1 插件的目标(Plugin Goals)

一个插件通常可以完成多个任务,每一个任务就叫做插件的一个目标。如执行mvn install命令时,调用的插件和执行的插件目标如下:

每个插件都有哪些个目标,官方文档有更详细的说明:Maven Plugins:http://maven.apache.org/plugins/index.html

4.2.2将插件绑定到生命周期

Maven的生命周期是抽象的,实际需要插件来完成任务,这一过程是通过将插件的目标(goal)绑定到生命周期的具体阶段(phase)来完成的。如:将maven-compiler-plugin插件的compile目标绑定到default生命周期的compile阶段,完成项目的源代码编译:

4.2.3 内置的绑定

Maven对一些生命周期的阶段(phase)默认绑定了插件目标,因为不同的项目有jar、war、pom等不同的打包方式,因此对应的有不同的绑定关系,其中

针对default生命周期的jar包打包方式的绑定关系如下:

 

第二列中,冒号后面即是绑定的插件目标,冒号前面是插件的前缀(prefix),是配置和使用插件的一种简化方式Plugin Prefix

http://maven.apache.org/guides/introduction/introduction-to-plugin-prefix-mapping.html

clean tomcat7:run

 4.2.3自定义绑定

用户可以根据需要将任何插件目标绑定到任何生命周期的阶段,如:将maven-source-plugin的jar-no-fork目标绑定到default生命周期的package阶段,这样,以后在执行mvn package命令打包项目时,在package阶段之后会执行源代码打包,生成如:ehcache-core-2.5.0-sources.jar形式的源码包。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <execution>
                    <id>attach-source</id>
                    <phase>package</phase><!-- 要绑定到的生命周期的阶段 -->
                    <goals>
                        <goal>jar-no-fork</goal><!-- 要绑定的插件的目标 -->
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    ……
</build>

4.2.4 配置插件

Maven插件高度易扩展,可以方便的进行自定义配置。如:配置maven-compiler-plugin插件编译源代码的JDK版本为1.7:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

也可以对插件的各个目标进行更具体的配置。Configuring Plug-ins

http://maven.apache.org/guides/mini/guide-configuring-plugins.html

4.2.5插件仓库

跟其他构件一样,插件也是根据坐标存储在Maven仓库中。超级POM中Maven配置的默认插件远程仓库如下:

<pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
</pluginRepositories>

5、继承(不熟)

上一级的maven依赖能被这一级使用

6、连接私服

私服地址
http://localhost:8081/nexus
默认账号
账号名:admin
密码:admin123

修改maven的配置文件

 <mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->
      <mirror>
          <mirrorOf>central</mirrorOf>
          <name>central-mirror</name>
          <url>http://127.0.0.1:8081/nexus/content/repositories/com.lamsey.com/</url>
      </mirror>
  </mirrors>

7、聚合

:一个项目中的多个工程想要安装到仓库中时,只能一个一个手动安装,比较繁琐,配置聚合之后就能够实现一键安装

  <parent>
    <groupId>com.lamsey</groupId>
    <artifactId>lamsey-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>lamsey-manager</artifactId>
  <packaging>pom</packaging>
  <!-- 聚合工程  -->
  <modules>
      <module>lamsey-manager-pojo</module>
      <module>lamsey-manager-mapper</module>
      <module>lamsey-manager-interface</module>  
      <module>lamsey-manager-service</module>
  </modules>

 聚合的效果图如下:

原文地址:https://www.cnblogs.com/limingxian537423/p/7158395.html