玖叶教程网

前端编程开发入门

Maven:12个常用命令+POM文件全属性分解,让你一清二楚

溪云阁:专注编程教学,架构,JAVA,Python,微服务,机器学习等领域,欢迎关注,一起学习。


什么是Maven

相信现在很多公司基本上还是用Maven,相比于基于Goovy的Gradle,Maven到现在还是很多人的选择,虽然Hibernate已经于2010年迁移到Gradle,但是并不妨碍Maven的优秀。

Maven并不是一个POM文件,而是一个可以通过POM文件里面的信息描述来管理整个项目的构建、报告及文档的项目管理软件

Maven常用命令

1、mvn install

这是最常用的命令,用于把项目安装到本地的仓库中,提供给别的项目做引用或作自有项目。

2、mvn clean

与上面的install起着反作用能力,当你发现项目install有问题的时候,可以先clean(清除),然后重新install。

3、mvn archetype

这个非常容易理解,我们一般都在eclipse或者idea创建maven项目的时候,可以用这个命令,就是创建一个maven项目。

4、mvn deploy

一般情况下,我们做maven项目,都会有私库的存在,就是自己在服务器上建自己的,存放jar包的仓库,这个命令就是用来把我们install好的包发布(其实就是网络传输)上去。

5、mvn site 生成项目相关信息的网站

我们一般在一个项目的时候,都是有一定信息的,这个命令可以帮我们生成html形式的项目信息,不过现在小编很少用。

6、mvn compile

compile编译的意思,其实就是编译maven项目的源代码

7、mvn test-compile

与上面的类似,不过这次编译的是测试测试包里面的源代码

8、mvn test


现在很多项目都要求做单元测试,这个命令可以帮助我们测试所有的单元测试。

9、mvn package

这是一个集成过程,它的执行顺序是先clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段,最后是成一个jar包

10、mvn eclipse

生成一个eclipse可直接导入的文件

11、mvnjetty:run与mvntomcat:run

启用jetty服务或者启动tomcat服务

12、mvn clean package -Dmaven.test.skip=true

这个是执行重新打包的命令,但是这个重新打包是不会执行测试类,因为有时候测试类并不能连接到一些环境。



Maven的POM文件解析

1、父项目parent解析

<parent>
 groupId:父项目的组织ID,如果发布到公网,需要全球唯一-->
    <artifactId />
    <groupId />
    <version />
    <relativePath />
</parent>


#artifactId:父项目的项目id,在组织id下需要作为唯一
#version:父项目的版本号
#relativePath:父项目的系统位置,一般不设置

2、当前项目基础属性解析

<!--模型的版本,很少改变,一般定义好之后不用变化-->
<modelVersion>3.0.0</modelVersion>
<!--项目组织名称,如果继承parent,其实可以不用写-->
<groupId>com.boots</groupId>
<!--项目名称,这个要求写,打包的时候需要用到-->
<artifactId>boots-maven</artifactId>
<!--项目打包后的类型,常见的有jar,pom,war等三种-->
<packaging>war</packaging>
<!--项目当前版本,常见有RELEASE,SNAPSHOT,按照约定,尽可能要大写-->
<version>2.0.0-RELEASE</version>
<!--项目的名称,一般跟artifactId一样即可 -->
<name>boots-maven</name>
<!--项目的地址,因为在做系列,小逼设置为github地址 -->
<url>h ttps://gitee.com/smartDis/boots</url>
<!-- 项目描述,这是里为了方便后面开发的兄弟知道这是做啥的  -->
<description>Maven:12个常用命令+POM文件全属性分解,让你一清二楚</description>
<!--项目构建版本的时候产生的年月 -->
<inceptionYear />

3、前置条件属性解析(很少用)

<!--当前项目需要的前置条件 -->
<prerequisites>
   <!--当前项目需要maven的最低版本-->
    <maven />
</prerequisites>

4、项目问题管理issueManagement系统属性全解析

<issueManagement>
  <!--当前项目问题管理系统的名称,这是为禅道 -->
   <system>zentao</system>
   <!--禅道的地址,这里是官网的地址,自行去搞 -->
   <url>h ttps://www.zentao.net/download/80185.html</url>
</issueManagement>

5、持续继集成ciManagement全属性解析

<ciManagement>
   <!--持续集成的名称,可用Walle,Jekins,云效等-->
   <system />
   <!--持续集成的web地址,一般有接口就填写接口 -->
   <url />
   <!--完成后通知 -->
   <notifiers>
         <notifier>
          <!--通知的类型,一般为邮件 -->
          <type />
          <!--错误时通知 -->
           <sendOnError />
           <!--失败时通知 -->
           <sendOnFailure />
           <!--成功时通知 -->
           <sendOnSuccess />
           <!--警告时通知 -->
           <sendOnWarning />
           <!--发送地址,一般是邮件地址 -->
           <address />
           <!--自定义配置项 -->
           <configuration />
     </notifier>
   </notifiers>
</ciManagement>

7、邮件列表属性mailingLists全解析

<mailingLists>
     <mailingList>
          <!--设置邮件名称 -->
          <name>林溪</name>
          <!--发送邮件地址 -->
          <post>[email protected]</post>
          <!--订阅邮件地址 -->
          <subscribe>[email protected]</subscribe>
          <!--取消订阅邮件地址 -->
          <unsubscribe>[email protected]</unsubscribe>
          <!--邮件服务器地址 -->
          <archive>h ttps://gitee.com/smartDis/boots</archive>
      </mailingList>
</mailingLists>

8、开发者列表developers及contributors属性全解析(两者属性一样,把developers换成contributors即可)

<developers>
      <developer>
         <!--开发者的唯一id-->
          <id>林溪</id>
          <!--开发者名称 -->
          <name>林溪</name>
          <!--开发者邮件 -->
          <email>[email protected]</email>
          <!--开发者主页 -->
          <url >gitee.com/smartDis/boots</url>
          <!--项目开发者在项目中扮演的角色,角色元素描述了各种角色 -->
          <roles>
              <role>Developer</role>
          </roles>
          <!--开发者组织 -->
          <organization>boots</organization>
          <!--组织的url -->
          <organizationUrl>gitee.com/smartDis/boots</organizationUrl>
          <!--开发者属性 -->
          <properties>
              <dept>No</dept>
          </properties>
          <!--开发者时区,一般没啥意义,只是为了让人知道这货在什么地方 -->
          <timezone>8</timezone>
      </developer>
</developers>

9、项目licenses属性全解析

<licenses>
    <license>
         <!--license名称,具有法律意义的-->
         <name>boots</name>
         <!--license文本的告知信息地址,这个很官方 -->
         <url>gitee.com/smartDis/boots</url>
         <!--代表可以用Maven中央仓库下载,一般都是这个 -->
         <distribution>repo</distribution>
         <!--license的其他信息 -->
         <comments>我是license的其他信息</comments>
      </license>
 </licenses>

10、build全属性解析

 <build>
        <!--需要编译的源码地址 -->
        <sourceDirectory />
        <!--需要执行的脚本地址,一般都是拷贝到目标目录 -->
        <scriptSourceDirectory />
        <!--需要执行测试编译的源码地址 -->
        <testSourceDirectory />
        <!--编译后存放的地址 -->
        <outputDirectory />
        <!--测试编译后存放的地址 -->
        <testOutputDirectory />
        <!--拓展构建,里面的属性跟我们刚刚最上面的属性一样-->
        <extensions>
            <extension>
                <groupId />
                <artifactId />
                <version />
            </extension>
        </extensions>
        <!--全局默认值设置 -->
        <defaultGoal />
        <!-- 资源属性,用来操作项目中类似properties等文件-->
        <resources>
            <resource>
                <!-- 打包后资源的目标地址。 -->
                <targetPath />
                <!--是否需要过滤的资源 -->
                <filtering />
                <!--原先存放资源的地址 -->
                <directory />
                <!--包含的资源的哪些文件,例如yml等 -->
                <includes />
                <!--不需要打包的资源的哪些文件,例如xml等-->
                <excludes />
            </resource>
        </resources>
        <!--测试包中资源的信息,属性与上面的一样,参考杰克 -->
        <testResources>
            <testResource>
                <targetPath />
                <filtering />
                <directory />
                <includes />
                <excludes />
            </testResource>
        </testResources>
        <directory />
        <!--打包后的文件名,会采用${artifactId}-${version}形式 -->
        <finalName />
        <!--过滤器属性文件列表 -->
        <filters />
         <pluginManagement>
            <plugins>
                <plugin>
                    <!--插件的group ID -->
                    <groupId />
                    <!--插件的artifact ID -->
                    <artifactId />
                    <!--插件的版本 -->
                    <version />
                    <!--插件的排除文件-->
                    <extensions />
                    <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。 -->
                    <executions>
                        <execution>
                            <id />
                            <phase />
                            <goals />
                            <inherited />
                            <configuration />
                        </execution>
                    </executions>
                    <!--插件的依赖 -->
                    <dependencies>
                        <dependency>
                        </dependency>
                    </dependencies>
                    <inherited />
                    <configuration />
                </plugin>
            </plugins>
        </pluginManagement>
        <!--插件的列表,属性与上面类似 -->
        <plugins>
            <plugin>
                <groupId />
                <artifactId />
                <version />
                <extensions />
                <executions>
                    <execution>
                        <id />
                        <phase />
                        <goals />
                        <inherited />
                        <configuration />
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                    </dependency>
                </dependencies>
                <goals />
                <inherited />
                <configuration />
            </plugin>
        </plugins>
    </build>

11、远程仓库repositories(一般为私库)全属性解析

<repositories>
    <repository>
       <releases>
                <!--true -->
                <enabled />
                <!--该元素指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是:always(一直),daily(默认,每日),interval:X(这里X是以分钟为单位的时间间隔),或者never(从不)。 -->
                <updatePolicy />
                <!--当Maven验证构件校验文件失败时该怎么做:ignore(忽略),fail(失败),或者warn(警告)。 -->
                <checksumPolicy />
            </releases>
            <!-- 如何处理远程仓库里快照版本的下载。有了releases和snapshots这两组配置,POM就可以在每个单独的仓库中,为每种类型的构件采取不同的 
                策略。例如,可能有人会决定只为开发目的开启对快照版本下载的支持。参见repositories/repository/releases元素 -->
            <snapshots>
                <enabled />
                <updatePolicy />
                <checksumPolicy />
            </snapshots>
            <!--远程仓库唯一标识符。可以用来匹配在settings.xml文件里配置的远程仓库 -->
            <id>banseon-repository-proxy</id>
            <!--远程仓库名称 -->
            <name>banseon-repository-proxy</name>
            <!--远程仓库URL,按protocol://hostname/path形式 -->
            <url>h ttp://192.168.1.169:9999/repository/</url>
            <!-- 用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)。Maven 2为其仓库提供了一个默认的布局;然 
                而,Maven 1.x有一种不同的布局。我们可以使用该元素指定布局是default(默认)还是legacy(遗留)。 -->
            <layout>default</layout>
        </repository>
    </repositories>

12、依赖dependencies全属性解析

<dependencies>
        <dependency>
            <!--依赖的组织id -->
            <groupId>com.boots</groupId>
            <!--依赖的artifact ID -->
            <artifactId>boots-api</artifactId>
            <!--依赖的版本号 -->
            <version>1.1.0.RELEASE</version>
            <!-- 依赖的类型,默认就是jar,一般不用配置-->
           <type>jar</type>
            <!-- classifier通常用于区分从同一POM构建的具有不同内容的构件(artifact -->
            <classifier>jdk13</classifier>
            <!--依赖范围-->
            <!-- compile :默认范围,用于编译 - provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath 
             <!-- - runtime: 在执行时需要使用 - test: 用于test任务时使用 - system: 需要外在提供相应的元素。通过systemPath来取得 
                - systemPath: 仅用于范围为system。提供相应的路径 - optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用 -->
            <scope>test</scope>
            <!--仅供system范围使用。注意,不鼓励使用这个元素,并且在新的版本中该元素可能被覆盖掉。该元素为依赖规定了文件系统上的路径。需要绝对路径而不是相对路径。推荐使用属性匹配绝对路径,例如${java.home}。 -->
            <systemPath></systemPath>
            <!--当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖。此元素主要用于解决版本冲突问题 -->
            <exclusions>
                <exclusion>
                    <artifactId>spring-core</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
            <!--可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。可选依赖阻断依赖的传递性。 -->
            <optional>true</optional>
        </dependency>
    </dependencies>


拓展

还有哪些没有的,欢迎补充上来


--END--

作者:@溪云阁

原创作品,抄袭必究

如需要源码,转发,关注后私信我

部分图片或代码来源网络,如侵权请联系删除,谢谢!


历史文章:

springboot2.2.X手册:Eureka不更,Consul被禁,启用Nacos

springboot2.2.X手册:构建全局唯一的短链接数据中心

springboot2.2.X手册:放弃fastdfs,整合Minio做文件服务器真香

springboot2.2.X手册:分布式系统下,重复提交的解决方案

springboot2.2.X手册:Easypoi导出excel,最新版的手感香不香?

springboot2.2.X手册:项目从100M瘦身到100K,部署省事多了!

springboot2.2.X手册:redis的7种类型100个方法全解析

springboot2.2.X手册:是时候用Lettuce替换Jedis操作Redis缓存了

springboot2.2.X手册:构建多元化的API接口,我们这样子设计

springboot2.2.X手册:基于Jasypt的JavaConfig方式敏感信息加密

springboot2.2.X手册:整合最新版MybatisPlus 3.3.1版本

springboot2.2.X手册:对象复制哪种最快?7种复制方式性能对比

springboot2.2.X手册:基于OSS解决文件存储(一年9元^^,赚了)

springboot2.2.X手册:36个注解详细解析,一目了然

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言