3.POM文件介绍以及常用命令

1. POM文件常用内容

  • 自己的坐标信息以及父工程信息(parent)
  • 属性(properties)
  • 多版本控制(profiles)
  • 依赖版本控制(dependencyManagement)
  • 依赖注入(dependencies)
  • 上传仓库配置(distributionManagement)
  • 仓库配置(repositories,pluginRepositories)
  • 构建(build)
    • 资源配置(resources)
    • 插件(plugins)

2. 自己的坐标信息以及父工程信息

2.1 自己的坐标信息

创建完项目会自己创建出来

<groupId>xyz.hlh</groupId>
<artifactId>maven-Demo2</artifactId>
<version>1.0-SNAPSHOT</version>

2.2 父工程信息

如果有父工程,可以配置

<!-- 父工程信息 -->
<parent>
    <groupId>xyz.hlh</groupId>
    <artifactId>maven-Demo1</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

3. 属性

3.1 自定义属性

自定义属性,最多的就是定义jar包版本,下面掉调用。统一管理

<properties>
    <!-- 管理jdk,编译jdk版本 --> 
    <java.version>11</java.version>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <!-- 自定义属性 一般配置jar包版本号,统一管理,下面调用 -->
    <mybatis.version>3.5.7</mybatis.version>
    <spring-boot.version>2.5.3</spring-boot.version>
</properties>


<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis.version}</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/mybatis-3.5.7.jar</systemPath>
    </dependency>
</dependencies>

3.2 内置属性

Maven提前设置好的属性,直接使用即可

${basedir} 项目根目录

${version} 当前项目版本

3.3 setting

使用Maven配置文件Setting.xml中的标签属性,用于动态配置

${settings.localRepository}

3.4 java系统属性

读取Java系统属性

${user.home}

3.5 环境变量属性

使用Maven配置文件setting.xml中的标签属性,用于动态配置

${env.JAVA_HOME}

4. 版本管理

4.1 工程版本

  • SNAPSHOT(快照版本)
    • 项目开发过程中,为方便团队成员合作,解决模块间相互依赖和时时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)
    • 快照版本会随着开发的进展不断更新
  • RELEASE(发布版本)
    • 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本

4.2 工程版本号约定

约定规范:

  • <主版本>.<次版本>.<增量版本>.<里程碑版本>
  • 主版本:表示项目重大架构的变更,如:spring5相较于spring4的迭代
  • 次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞
  • 增量版本:表示有重大漏洞的修复
  • 里程碑版本:表示一个版本的里程碑,往往表示不是非常稳定,还需要很多测试。

范例:

  • 5.1.9.RELEASE

并不是每一个版本号都会拥有这四个部分,一般来说,主版本和次要版本都会声明,但是增量版本和里程碑就不一定了。

5. 多版本控制

5.1 多版本兼容

一个工程一般都有多个环境,不同的环境有不同的配置文件,激活那个配置文件可以通过profiles结合activation进行控制
在这里插入图片描述

<profiles>
    <!-- dev环境 -->
    <profile>
        <id>dev</id>
        <!--设置默认启动-->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <!-- dev环境的变量 -->
        <properties>
            <profile.active>dev</profile.active>
        </properties>
    </profile>
    <!-- pro环境 -->
    <profile>
        <id>pro</id>
        <!-- pro环境的变量 -->
        <properties>
            <profile.active>pro</profile.active>
        </properties>
    </profile>
    <!-- test环境 -->
    <profile>
        <id>test</id>
        <!-- test环境的变量 -->
        <properties>
            <profile.active>test</profile.active>
        </properties>
    </profile>
</profiles>

使用:会根据当前默认的环境读取配置信息

${profile.active}

4. 依赖版本控制

通过dependencyManagement限制本项目以及子项目的jar包版本

<dependencyManagement>
    <dependencies>
        <!-- springboot 的依赖工程 pom类型 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
    </dependencies>
</dependencyManagement>

5. 依赖注入

通过dependencies标签统一完成项目总的jar包(依赖)管理

<dependencies>
    <!-- mybatis 因为上面对mybatis做了版本控制,所以这不用标识version -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
    </dependency>
</dependencies>

6. 仓库配置

通过repositoriespluginRepositories设置远程仓库和远程插件仓库,用于下载jar包

<repositories>
    <!-- 阿里云远程仓库 -->
    <repository>
        <id>aliyun_maven</id>
        <name>阿里云仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
        <!-- 是否从此仓库下载正式版 -->
        <releases>
            <enabled>true</enabled>
        </releases>
        <!-- 是否下载快照版,不稳定 -->
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

<!-- 插件远程仓库 -->
<pluginRepositories>
    <!-- 阿里云远程仓库 -->
    <pluginRepository>
        <id>aliyun_maven</id>
        <name>阿里云仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
        <!-- 是否从此仓库下载正式版 -->
        <releases>
            <enabled>true</enabled>
        </releases>
        <!-- 是否下载快照版,不稳定 -->
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

通过distributionManagement配置私服仓库,用于配置上传的仓库

<distributionManagement>
    <!-- 指定私服地址,发布的仓库地址,多个仓库根据仓库类型,自动上传到指定类型的仓库 -->
    <repository>
        <id>MyMaven</id>
        <name>MyMaven</name>
        <url>http://192.168.10.31:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>MyMaven</id>
        <name>MyMaven</name>
        <url>http://192.168.10.31:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

7. 资源配置

在Idea中,默认值吧resource下的静态文件打包到根目录,比如xml,配置文件之类的。放到src/main/java下的文件不会打包,可以通过build下的resources规定静态文件打包的位置

<build>
    <resources>
        <!-- 吧lib下的包打包放到lib目录下 -->
        <resource>
            <!-- 要打包的目录 -->
            <directory>lib/</directory>
            <!-- 包含所有的jar -->
            <includes>
                <include>**/*.jar</include>
            </includes>
            <!-- 打包完放到那 -->
            <targetPath>lib/</targetPath>
        </resource>
        <!-- 打包所有的yml -->
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
            <!-- 排除项目 -->
            <excludes>
                <exclude></exclude>
            </excludes>
        </resource>
    </resources>
</build>

8. 常见插件配置

build下的plugins中可以声明多个插件。Maven的插件有很多,包括编译插件、源码打包插件、生成jar包、生成war包,tomcat插件、springboot启动插件等等

  • maven编译插件

    <build>
        <plugins>
            <!-- maven 编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                    <encoding>UTF-8</encoding>
                    <showWarnings>true</showWarnings>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
  • 源码打包

    <build>
        <plugins>
            <!-- 源码打包插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.2.1</version>
                <!-- 进行package命令时就可以将源码同时进行打包 -->
                <!-- 所以我们需要绑定source插件到我们default生命周期的package阶段 -->
                <executions>
                    <execution>
                        <!-- 定义一个阶段,这个阶段是package -->
                        <phase>package</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    
  • 生成jar包

    下面这个是打包成jar包,但是吧所有的jar包依赖和配置文件都单独打出来,方便在服务器上修改配置文件

    <properties>
            <!-- 管理jdk,编译jdk版本 -->
            <java.version>11</java.version>
            <!-- 启动类目录 -->
            <main-class>com.study.maven.newbee.NewbeeApplication</main-class>
            <!-- lib目录前缀 -->
            <classpathPrefix>app_lib/</classpathPrefix>
            <!-- 单独打包所有的依赖,放到指定目录 -->
            <outputDirectory>${project.basedir}/target/app_lib</outputDirectory>
        </properties>
    <build>
        <plugins>
            <!-- maven依赖打包 jar包单独打出来 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.2</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <!-- 项目编译目录target -->
                            <outputDirectory>${outputDirectory}</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- 生成jar包 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <!-- lib目录前缀 -->
                            <classpathPrefix>${classpathPrefix}</classpathPrefix>
                            <!-- 启动类全限定类名 -->
                            <mainClass>${main-class}</mainClass>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>./</Class-Path>
                        </manifestEntries>
                    </archive>
                    <!-- 把这些配置文件独立出去,静态文件,可以随时更改。如果是部署,可以排除。如果是打包到私服,不要排除,根据具体场景来定 -->
                    <excludes>
                        <exclude>public/**</exclude>
                        <exclude>static/**</exclude>
                        <exclude>*.xml</exclude>
                        <exclude>*.yml</exclude>
                        <exclude>*.properties</exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
  • 生成war包

    <build>
        <plugins>
            <!-- 生成war包 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.1</version>
                <configuration>
                    <warSourceDirectory>webapp</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
  • tomcat插件

    <build>
        <plugins>
            <!-- tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                    <uriEncoding>UTF-8</uriEncoding>
                    <server>tomcat7</server>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
  • springboot启动插件

    <properties>
    	<spring-boot.version>2.5.3</spring-boot.version>
    </properties>
    <build>
        <plugins>
            <!-- springboot启动插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
        </plugins>
    </build>
    
  • 跳过测试

<!-- 跳过单元测试 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>

9. Maven常见命令

正如Idea中的Lifecycle中的命令,也就是maven的生命周期
在这里插入图片描述

  • clear

    清理,会把target中的内容清楚

  • validate

    验证工程是否正确,所需的信息是否完整

  • compile

    将项目编译到target中,但是不打包,不生成jar文件

  • test

    测试,调用所有的测试类,测试通过才会进行下一步打包

  • package

    将项目中的内容打包到target目录

  • verify

    检查,检查package是否有效,符合标准

  • install

    将package安装到本地仓库,让其他项目依赖

  • deploy

    将最终的包复制到远程的仓库,以让其他开发人员于项目共享

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值