Maven的简单介绍

1 篇文章 0 订阅

Maven

  1. 构件

    <packaging> : pom、jar、ear、war以及maven-plugin,构建Maven之后所生成的文件类型,Pom本身不产生构件,用来作为依赖库。
    pom类型常用于微服务中作为父Pom,通过 可以将子模块包含进来,共享父Pom的依赖,

  2. GAV坐标

    <groupId> 、<artifactId> 以及<version> 的首字母

    <groupId>:项目或者项目组的全局唯一标识,通常是Java源代码中的全限定Java包名。如io.netty

    <artifactId>:某个项目组的不同构件,如netty-all

    <version>:构件版本

    <type>:构件的类型

    <classifier>:区分相同的pom但是被不同方式构建的构件,如javadoc、sources、jdk16、jdk17

  3. 依赖


<dependencies>
    <dependency>
        <groupId/>
        <artifactId/>
        <version/>
        <!--    type、scope 如果依赖不是compile 或者 jar 的依赖 是必须的-->
        <type/>
        <scope/>
        <!--    指定元素在文件系统中的绝对位置   -->
        <systemPath/>
    </dependency>
    ...
</dependencies>

<scope>

  • compile:编译和执行需要的默认值
  • runtime:只有执行需要
  • optional:不被引用了这个项目所产生的构件的其他项目,视为传递依赖
  • provided:不会被包含在由这个POM产生的WAR文件的WEB_INF/lib中
  • test:只有编译和测试的执行需要
  1. 依赖管理

<dependencyManagement>:可以包含被其他项目使用的<dependency>,可以供POM的子项目进行使用,其他项目可以通过<
scope>的import来导入他们。


<properties>
    <netty.version>4.1.9</netty.version>
</properties>
<dependencyManagement>
<dependencies>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>${netty.version}</version>
    </dependency>
</dependencies>
</dependencyManagement>

  1. 生命周期

三个内置的构建生命周期:clear、default、site,前两个用于清理和分发项目。

构建生命周期的各个阶段的部分清单:

  • validate 检查项目是否正确,所有必须的信息是否已经就绪
  • process-source 处理源代码,
  • compile 编译项目的源代码
  • process-test-resource 复制并处理资源到测试目标目录中
  • test-compile 将测试源代码编译到测试目标目录中
  • test 使用合适的单元测试框架测试编译的源代码
  • package 将编译的代码打包为他的可分发格式
  • integration-test 处理并将软件包部署到一个可以运行集成测试的环境中
  • verify 运行任何的检查以验证软件包是否有效,并符合质量标准
  • install 将软件包安装到本地存储库,在那里其他本地构建的鲜蘑菇可以将他引用为依赖
  • deploy 将最终构建上传到远程存储库,以与其他开发人员和项目共享。
  1. 插件

所有的构建生命周期阶段的执行都通过插件来实现。
在这里插入图片描述


<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
</plugin>
  1. 插件管理

如同dependencyManagement一样,子Pom可以直接继承使用。


<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <!--      maven 提供的插件,所以可以省略groupId          -->
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

子类继承插件


<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

  1. 配置文件

通过<profile>来改变pom的行为,根据JDK版本、操作系统或者目标部署环境来构建参数

  1. 存储库

可以是远程也能是本地的。

  1. 快照和发布

远程库通常包含了快照和发布两个区域,

  • 如果<version> 由SNAPSHOT结尾会被认为该构件尚未发布,可以使用相同Version进行上传,每次哦都会分配一个唯一的时间戳,所以项目拉取的总是最新的构件。

  • 非SNAPSHOT结尾就是发布版本,只允许某个特定Version上传一次。

当构建SNAPSHHOT
依赖的项目是,会检查本地依赖库是否相应的版本,如果没有就会去指定的远程仓库进行检索,这时候就会拉取到最新时间戳的构件;如果本地有这个构件,且当前构建也是这一天中的第一个,那么会尝试更新本地副本。可以通过setting.xml进行设置。

pom的继承和聚合

  1. 继承

包含子项目要继承的信息,当然子项目可以重写

  1. 聚合

聚合器pom会构建一个或者多个子项目。


<modules>
    <module>Server</module>
    <module>Client</module>
</modules>
  1. 案例

<project>
    <modelVersion>4.0.0</modelVersion>
    <!--  声明当前pom的父pom  -->
    <parent>
        <groupId>nia</groupId>
        <artifactId>nia-samples-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <!--  当前pom的gav  -->
    <artifactId>chapter2</artifactId>
    <packaging>pom</packaging>
    <name>2. Echo Client and Server</name>
    <!--  声明了父pom下的目录,其中包含了将由这个pom来构建的maven项目  -->
    <modules>
        <module>Client</module>
        <module>Server</module>
    </modules>
    <!--  可以通过命令行进行重写。默认子项目会继承这些属性  -->
    <properties>
        <echo-server.hostname>localhost</echo-server.hostname>
        <echo-server.port>9999</echo-server.port>
    </properties>
    <!-- 父Pom的依赖子项目可以继承  -->
    <dependencies>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>
    </dependencies>
    <build>
        <!--    父Pom的插件可以由子项目继承    -->
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

<project>
    <!--  指明父pom  -->
    <parent>
        <groupId>nia</groupId>
        <artifactId>chapter2</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>echo-server</artifactId>


    <build>
        <!--    exec-maven-plugin 插件可以执行Maven 命令行的任意命令 ;在这里,我们用它来执行Echo服务    -->
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>run-server</id>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>nia.echo.EchoServer</mainClass>
                    <arguments>
                        <argument>${echo-server.port}</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

  1. Mvn 语法
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值