maven

7/8/2023 maven

# 中央仓库配置

找到mirrors标签,删除旧配置,使用如下配置:

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
1
2
3
4
5
6

# package、install、deploy 三者之间区别

  • package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
  • install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
  • deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库

# maven中snapshot和正式版本区别

如果在项目的配置文件中(pom文件)指定的版本号带有‘-SNAPSHOT’后缀时,打包出来的就是一个快照版本;

区别: 正式版本: 如果项目依赖某个库的正式版本, 项目构建的时候构建工具会先在本地仓库中查找是否已经有这个版本库的依赖, 如果不存在,则会去远程仓库中拉取,以后再次构建时都不会去访问远程仓库; 问题是: 当依赖的某个库发布了新的版本,且版本号同名,那么我们项目将不能获取新发布的依赖,而且如果某个依赖经常发布新版本, 我们需要依赖最新的版本, 则需要不断的修改版本号;

snapshot版本: 如果项目依赖某个库的snapshot版本,每次构建项目时都会优先去远程仓库中查看是否有最新的snapshot.jar,如果有则下载使用,即使本地仓库已有最新版本;

# repository

  1. repositories中的repository

表示从什么库地址可以下载项目依赖的库文件

  1. distributionManagement中的repository

表示的是项目打包成库文件后要上传到什么库地址

  1. pluginRepositories中的repository

pluginRepositories中的repository是以pluginRepository表示的,它表示插件从什么库地址下载。

# javaweb打包

war模式:将WEB工程以包的形式上传到服务器 ; war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;

(1)war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布;

(2)war exploded模式是直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。

# 依赖范围

maven 在编译、测试和运行项目时会使用不同的 classpath(编译classpath、测试 classpath、运行 classpath)。依赖范围就是用来控制依赖和这三种 classpath 的关系。maven 中有以下几种依赖范围:compile:默认值,使用该依赖范围的 maven 依赖,在编译、测试和运行时都需要使用该依赖test:只对测试 classpath 有效,在编译主代码和运行项目时无法使用此类依赖。如 JUnit 只在编译测试代码和运行测试的时候才需要此类依赖provided:已提供依赖范围。对于编译和测试 classpath 有效,但在运行时无效。如 servlet-api,编译和测试时需要该依赖,但在运行项目时,由于容器已经提供此依赖,故不需要 maven重复引入runtime:运行时依赖范围。对于测试和运行 classpath 有效,但在编译主代码时无效。如 JDBC 驱动实现,项目主代码的编译只需要 JDK 提供的 JDBC接口,只有在测试和运行时才需要实现 JDBC 接口的具体实现system:系统依赖范围import:导入依赖范围 import 导入依赖管理

  • compile:默认值,使用该依赖范围的 maven 依赖,在编译、测试和运行时都需要使用该依赖
  • test:只对测试 classpath 有效,在编译主代码和运行项目时无法使用此类依赖。如 JUnit 只在编译测试代码和运行测试的时候才需要此类依赖
  • provided:已提供依赖范围。对于编译和测试 classpath 有效,但在运行时无效。如 servlet-api,编译和测试时需要该依赖,但在运行项目时,由于容器已经提供此依赖,故不需要 maven重复引入
  • provided:已提供依赖范围。对于编译和测试 classpath 有效,但在运行时无效。如 servlet-api,编译和测试时需要该依赖,但在运行项目时,由于容器已经提供此依赖,故不需要 maven重复引入
  • system:系统依赖范围, 导入本地jar包
  • import:导入依赖范围,只在<dependencyManagement>内定义的<dependency>中支持import这一scope。 它表示,在当前这个pom文件的<dependencyManagement> 内定义的<dependency>会被替换成一些系列的<dependency>

# 给项目打上标签版本

# 修改 maven version标签 版本号
mvn versions:set -DnewVersion="1.0.0"
# 重新打包
mvn clean package    
1
2
3
4