Maven的pom.xml配置

pom.xml

pom项目标签

例子:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.liwinal</groupId>
  <artifactId>development</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
</project>

解释:

    <!--指的是Pom模型的Maven版本-->
  <modelVersion>4.0.0</modelVersion>

  <!--定义当前项目属于哪个组;group公司或组织域名倒序+项目名-->
  <groupId>cn.liwinal</groupId>

  <!--maven项目在组中的唯一标识;artifact模块名-项目名-->
  <artifactId>development</artifactId>

  <!--里程碑版本;version版本,SNAPSHOT是开发版-->
  <version>1.0-SNAPSHOT</version>
   
  <!--为pom时在maven install时不会生成jar/war压缩包-->
  <packaging>pom</packaging>
  <packaging>jar</packaging>
  <packaging>war</packaging>
   

<groupId>net.sf.json-lib</groupId>  
<artifactId>json-lib</artifactId>  
<version>2.2.2</version>
<classifier>jdk15-javadoc</classifier>
打包后就是json-lib-2.2.2-jdk15-javadoc.jar,用于区分不同JDK版本或区分项目的不同组成部分,例如,源代码、javadoc、类文件等。

version

版本组成:

<主版本号>.<次版本号>.<增量版本/修订版本号> - <里程碑版本号>
例如:1.0-SNAPSHOT的主版本为1,次版本为0,里程碑版本为SNAPSHOT

解释:

主版本: 表示项目的重大架构变化。如struts2和struts1采用不同的架构。

次版本: 较大范围功能增加和变化,及bug修复,并且不涉及到架构变化的。

增量版本:表示重大bug的修复,如果发现项目发布之后,出现影响功能的bug,及时修复,则应该是增量版本的变化。

里程碑版本:往往表示某个版本的里程碑,经常见到snapshot,另外还有alpha、beta,比如:1.0-SNAPSHOT、3.0-alpha-1、1.1.2-beta-2。

里程碑版本

例子:1.7、1.0-SNAPSHOT、1.1-release、2.3-alpha
snapshot:表示快照版,它不是个稳定版本,属于开发过程中使用的版本
进入测试阶段,会将里程碑版本号的SNAPSHOT替换成alpha或beta,即测试版本。
alpha:内部测试,只能内部
beta:外部测试
α、β、λ 常用来表示软件测试过程中的三个阶段。
-- α(alpha) 是第一阶段,一般只供内部测试使用;
-- β(beta)是第二个阶段,已经消除了软件中大部分的不完善之处,但仍有可能还存
在缺陷和漏洞,一般只提供给特定的用户群来测试使用;
-- λ(lambda)是第三个阶段,此时产品已经相当成熟,只需在个别地方再做进一步的
优化处理即可上市发行。
release:稳定版本
Alpha:软件或系统的内部测试版本,会有很多Bug,仅内部人员使用
Beta:软件或系统的测试版本,这一版本通常是在Alpha版本后,会有很多新功能,
同时也有不少Bug
Gamma:软件或系统接近于成熟的版本,只需要做一些小的改进就能发行
RC(Release Candidate):候选版本,这一版本不会增加新功能,多要进行Debug
GA(General Available):正式发布版本,这个版本就是正式的版本

版本变化顺序:
1.0-SNAPSHOT--->1.0-alpha--->1.0-beta--->1.0-RC--->1.0--->1.1-SNAPSHOT--->...

 

 

parent标签

例子:

    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.5.2</version>
      <relativePath/>
  </parent>

解释:

    <!--父项目-->
  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.5.2</version>
      <!-- lookup parent from repository 父pom的路径,如果为空则直接到仓库中查找,顺序为:relativePath元素中的地址–本地仓库–远程仓库 -->
      <relativePath/>
  </parent>

relativePath

1.默认我们不用写<relativePath>,那默认值就是 ../pom.xml,会从本地路径中获取parent的pom

例:

<parent>
<groupId>***</groupId>
<artifactId>***</artifactId>
<version>***</version>
</parent>

2.设定一个空值将始终从仓库中获取,不从本地路径获取。

例:

<parent>
<groupId>***</groupId>
<artifactId>***</artifactId>
<version>***</version>
<relativePath/>
</parent>

3.指定本地的路径,从本地路径获取parent的pom。

例:<relativePath>某个pom的路径<relativePath/>:

<parent>
<groupId>***</groupId>
<artifactId>***</artifactId>
<version>***</version>
  <relativePath>***<relativePath/>
</parent>

properties标签

例子:

    <properties>
      <spring-boot.version>2.3.5.RELEASE</spring-boot.version>
  </properties>
  <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-dependencies</artifactId>
          <version>${spring-boot.version}</version>
      </dependency>
  </dependencies>

解释:

设置版本号

modules标签

例子:

    <modules>
      <module>my-study-development</module>
  </modules>

解释:

子模块
module对应的是子模块的artifactId

repositories标签

<project>标签中,可以添加多个<repository>,用来引入其他maven的下载地址。

    <repositories>
      <repository>
          <!--远程仓库唯一标识符 -->
          <id>com.e-iceblue</id>

          <!--设置为了“*”,意味所有的依赖都是从这个镜像上下载 -->
          <mirrorOf>*</mirrorOf>

          <!--描述 -->
          <name>e-iceblue</name>

          <!--远程仓库url -->
          <url>https://repo.e-iceblue.cn/repository/maven-public/</url>

          <!--以下属于非必要项,可以不填 -->
          <layout>default</layout>

          <!--告诉Maven可以从这个仓库下载releases版本的构件-->
          <releases>
              <enabled>true</enabled>
          </releases>

          <snapshots>
              <!--如果是false则为:告诉Maven不要从这个仓库下载snapshot版本的构件-->
              <enabled>true</enabled>
              <!-- 这里指定更新策略 -->
      <!-- always、daily、interval、never -->
              <updatePolicy>always</updatePolicy>
          </snapshots>
      </repository>
  </repositories>

mirrorOf 的其他解释:

*:所有依赖;
external:*:所有不再本地和不是基于文件的依赖;
repo,repo1:所有来自repo或者repo1仓库的依赖;
*,!repo1:除了repo1外的所有依赖。即上面示例中的场景。

dependencies标签

例子:

    <dependencies>
      <!--web 模块-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
          <exclusions>
              <exclusion>
                  <artifactId>spring-boot-starter-tomcat</artifactId>
                  <groupId>org.springframework.boot</groupId>
              </exclusion>
          </exclusions>
      </dependency>
      <!--mysql-->
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <scope>runtime</scope>
      </dependency>
  </dependencies>

解释:

导入依赖包,常用包查看附录三:常用仓库。

exclusions表示去除这个包

scope默认值为compile,表示编译和打包需要次类库
test表示仅仅单元测试需要用到
provided表示编译用到,但打包不需要
runtime表示编译打包不需要,但运行时需要
比如数据库编译和打包不需要,但测试运行时需要就用runtime

 

dependencyManagement

应用场景:当一个maven项目想继承多个父模块时使用。

    <dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
              <version>1.2.3.RELEASE</version>
              <!-- 默认是jar表示引入的是jar包,pom表示引入的是父模块 -->
              <type>pom</type>
              <!-- import表示将父模块的jar包引入进来 -->
              <scope>import</scope>
              <!--<type>pom</type><scope>import</scope>,这种方式只能用在<dependencyManagement></dependencyManagement>中-->
          </dependency>
      </dependencies>
  </dependencyManagement>
父项目用了这个标签之后,它的子项目的依赖就不用再写版本号了

distributionManagement标签

Snapshot快照仓库用于保存开发过程中的不稳定版本

Release正式仓库则是用来保存稳定的发行版本

    <!--发布包配置-->
  <distributionManagement>
      <repository>
          <id>定义的id</id>
          <name>远程仓库的名字</name>
          <!-- releases库的地址 -->
          <url>http://XXXX/repository/maven-releases/</url>
      </repository>
      <snapshotRepository>
          <id>定义的id</id>
          <name>远程仓库的名字</name>
          <!-- snapshot库的地址 -->
          <url>http://XXXX/repository/maven-snapshots/</url>
      </snapshotRepository>
  </distributionManagement>

setting

<services>
<server>
  <id>这里的id跟上述的pom的id要一一对应</id>
<username>你私服的用户名</username>
  <password>密码</password>
</server>
<server>
  同上
</server>
</servers>

定义一个组件/模块为快照版本,只需要在pom.xml文件中在该模块的版本号后加上-SNAPSHOT即可(注意这里必须是大写)

例:

<groupId>com.xupp</groupId>
<artifactId>test</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>

 

    <distributionManagement>
      <repository>
          <id>nexus-releases</id>
          <name>nexus-releases</name>
          <!--指向仓库类型为host(宿主仓库)的储存类型为Release的仓库-->
          <url>http://192.168.1.185:8081/repository/maven-releases/</url>
      </repository>
      <snapshotRepository>
          <id>nexus-snapshots</id>
          <name>nexus-snapshots</name>
          <!--指向仓库类型为host(宿主仓库)的储存类型为Snapshot的仓库-->
          <url>http://192.168.1.185:8081/repository/maven-snapshots/</url>
      </snapshotRepository>
  </distributionManagement>

 

build标签

例子:

    <build>
      <finalName>${project.name}</finalName>
      <plugins>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
      </plugins>
  </build>

解释:

插件配置

finalName:自定义打包后的项目名,默认是artifactId+version

上传到远程maven仓

第一步:修改maven的setting文件

setting配置

<services>
<server>
  <!-- releases库的设置 -->
  <id>这里的id跟下面的pom的id要一一对应</id>
<username>你私服的用户名</username>
  <password>密码</password>
</server>
<server>
  <!-- snapshot库的设置 -->
  <id>这里的id跟下面的pom的id要一一对应</id>
<username>你私服的用户名</username>
  <password>密码</password>
</server>
</servers>

第二步:修改maven项目中的pom.xml

使用distributionManagement标签

Snapshot快照仓库用于保存开发过程中的不稳定版本

Release正式仓库则是用来保存稳定的发行版本

    <!--发布包配置-->
  <distributionManagement>
      <repository>
          <id>定义的id</id>
          <name>远程仓库的名字</name>
          <!-- releases库的地址 -->
          <url>http://XXXX/repository/maven-releases/</url>
      </repository>
      <snapshotRepository>
          <id>定义的id</id>
          <name>远程仓库的名字</name>
          <!-- snapshot库的地址 -->
          <url>http://XXXX/repository/maven-snapshots/</url>
      </snapshotRepository>
  </distributionManagement>

从远程maven仓库下载

setting设置

<!-- 下载jar包配置 -->
<profile>
  <!--profile的id -->
  <id>dev</id>
  <repositories>
    <repository> <!--仓库id,repositories可以配置多个仓库,保证id不重复 -->
      <id>nexus</id> <!--仓库地址,即nexus仓库组的地址 -->
      <url>http://121.4.56.246:8099/repository/hapi-host-release/</url> <!--是否下载releases构件 -->
      <releases>
        <enabled>true</enabled>
      </releases> <!--是否下载snapshots构件 -->
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>
  <pluginRepositories> <!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
    <pluginRepository> <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
      <id>public</id>
      <name>Public Repositories</name>
      <url>http://121.4.56.246:8099/repository/hapi-host-release/</url>
    </pluginRepository>
  </pluginRepositories>
</profile>

<!-- 添加以下配置进行激活上面的配置 -->
<activeProfiles>
  <activeProfile>dev</activeProfile>    
</activeProfiles>

 

https://blog.csdn.net/tanga842428/article/details/71249067

pom.xml设置

<repositories>
  <repository>
      <id>nexus</id><!--远程仓库唯一标识符 -->
      <name>Private Repository</name><!--描述 -->
      <!--远程仓库url -->
      <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
      <layout>default</layout>
      <releases>  
          <enabled>true</enabled>  
      </releases>  
      <snapshots>
          <enabled>true</enabled>
          <updatePolicy>always</updatePolicy>
      </snapshots>
  </repository>
</repositories>

标签说明:

repositorys:repositories标签的作用是用来配置maven项目的远程仓库;

repository:repositories标签下可以有很多个repository,每个repository都有唯一id;

layout:用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留);

releases-->enabled:如果为true表示告诉Maven可以从这个仓库下载releases版本的构件,false表示不能;

snapshots-->enabled: 如果为false表示告诉Maven不要从这个仓库下载snapshot版本的构件,true表示能;

禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用 。

配置本地仓库

setting配置

本地仓库地址
D:\ideadownload\maven\apache-maven-3.6.1\conf\settings.xml文件下的
<!-- localRepository
  | The path to the local repository maven will use to store artifacts.
  |
  | Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:\ideadownload\maven\apache-maven-3.6.1\repository</localRepository>
默认在c盘

 

配置maven拉取镜像

setting设置

  更改下载镜像
<mirrors>
<mirror>
<id>gloryview</id>
<mirrorOf>central</mirrorOf>
<url>http://192.168.1.185:8081/repository/maven-public/</url>
</mirror>
</mirrors>
 

build标签下载插件

springboot打包插件

引入配置

<build>
<plugins>
  <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
  </plugin>
</plugins>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>8</source>
            <target>8</target>
        </configuration>
    </plugin>
</plugins>
</build>

插件说明

img

build-info:生成项目的构建信息文件 build-info.properties

repackage:这个是默认 goal,在 mvn package 执行之后,这个命令再次打包生成可执行的 jar,同时将 mvn package 生成的 jar 重命名为 *.origin

run:这个可以用来运行 Spring Boot 应用

start:这个在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理

stop:这个在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理

指定jdk编译版本

<build>
  <plugins>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configration>
          <source>8</source>
          <target>8</target>
          </configration>
      </plugin>
  </plugins>
</build>

运行: java -jar 包文件名.jar

跳过测试用例

<!--
  在工作中,很多情况下我们打包是不想执行测试用例的
  可能是测试用例不完事,或是测试用例会影响数据库数据
  跳过测试用例执
  -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
      <!--跳过项目运行测试用例-->
      <skipTests>true</skipTests>
  </configuration>
</plugin>

附录一:maven的setting参数

 

附录二:pom的参数

 

附录三:常用仓库

mongoDB包

springboot整合

        <!--SpringBoot整合MongoDB-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-mongodb</artifactId>
      </dependency>
      <!--MongoDB相关依赖-->
      <dependency>
          <groupId>org.mongodb</groupId>
          <artifactId>mongodb-driver-sync</artifactId>
          <version>3.9.1</version>
      </dependency>

直连包

        <!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
      <dependency>
          <groupId>org.mongodb</groupId>
          <artifactId>mongo-java-driver</artifactId>
          <version>3.2.2</version>
      </dependency>

springBoot包

springboot项目包

    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.7.3</version>
      <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
       
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
      </dependency>

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
      </dependency>
  </dependencies>
  <build>
      <plugins>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
      </plugins>
  </build>

启动包

        <!-- Spring Boot -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
      </dependency>

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>

web启动器

        <!--web 启动器-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

redis

        <!--   redis基础-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>

mybatis-plus

        <!--mybatisplus代码生成器-->
      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-generator</artifactId>
          <version>3.4.1</version>
      </dependency>
       
      <!--mybatis-plus-->
      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.4.1</version>
      </dependency>

spring-boot-dependencies

作用是约束版本,里面声明了很多springboot的版本号。 spring-cloud-dependencies和spring-cloud-alibaba-dependencies则是去声明cloud和cloud-alibaba组件的版本 。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>2.3.5.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

type和scope的作用就是为了解决maven单继承的问题

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.5.4.RELEASE</version>
  <relativePath />
</parent>

<dependencyManagement>
  <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-dependencies</artifactId>
          <version>1.5.4.RELEASE</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-dependencies</artifactId>
          <version>Dalston.SR1</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
      <!-- Spring Cloud Alibaba -->
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-alibaba-dependencies</artifactId>
          <version>2.2.5.RELEASE</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
     
  </dependencies>
</dependencyManagement>

springboot集成swagger

    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.9.2</version>
  </dependency>
  <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.9.2</version>
  </dependency>

springboot热部署

修改配置文件后会自动重新加载,再编译一下就行,ctrl+F9

        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
          <optional>true</optional>
      </dependency>

springboot-aop

        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-aop</artifactId>
      </dependency>

 

单元测试包

        <!-- 测试启动器 -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
      </dependency>

      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <scope>test</scope>
      </dependency>

mysql包

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.18</version>
      </dependency>

cron包

        <!-- cron转换date -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-quartz</artifactId>
      </dependency>

lombok包

        <!--lombok-->
      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>1.18.10</version>
          <scope>provided</scope>
      </dependency>

hutool包

        <!--   https://hutool.cn/docs/#/-->
      <dependency>
          <groupId>cn.hutool</groupId>
          <artifactId>hutool-all</artifactId>
          <version>5.6.6</version>
      </dependency>

附录四:常用maven命令

mvn compile
编译Maven工程,编译主程序,会生成target目录

mvn test-compile
编译测试程序

mvn package
编译并打包生成jar/war等文件
※注意:运行Maven命令时一定要进入pom.xml文件所在的目录!

mvn install
打包并安装到本地仓库。如果这个项目是一个基础类库,本地其他项目也需要用到则需要安装到本地仓库

mvn deploy
同install,但打包并同时安装到远程仓库

mvn clean
删除target目录

mvn test
执行测试,并生成测试报告

mvn deploy
将打包的文件发布到远程参考,供其他开发人员下载

mvn install
将打包的jar/war文件复制到你的本地仓库中,供其他模块使用

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

查看版本
mvn -v
显示版本信息
mvn –version
配置环境变量
path下面加maven的bin目录

mvn eclipse:eclipse 将项目转化为Eclipse项目
mvn dependency:tree 打印出项目的整个依赖树
mvn archetype:generate 创建Maven的普通java项目
mvn tomcat:run 在tomcat容器中运行web应用
mvn jetty:run 调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用

 

附录五:Could not find artifact(本地仓库确实存在)

第一步:从本地关联jar包。

img

第二步:勾选Always update snapshot(更新快照)

img

 

 

posted @ 2022-06-14 17:34  liwinallucky  阅读(2499)  评论(0)    收藏  举报