maven是一个跨平台的依赖管理工具,可统一管理依赖、自动构建项目。
如果要在命令行使用maven命令,就需要配置maven的环境变量。
maven依赖jdk,没有配置jdk环境变量的需要先配置jdk。
1、新建环境变量 MAVEN_OPTS
-Xms256m -Xmx512m -Duser.language=zh -Dfile.encoding=UTF-8
2、在Path中添加maven的bin目录
也可以新建环境变量 MAVEN_HOME,值是maven主目录,然后在Path中添加 %MAVEN_HOME%\bin
<localRepository>F:/maven/repository</localRepository>
https://help.aliyun.com/document_detail/102512.html
聚合仓库里的依赖多,一般使用聚合仓库(group)。
可点击右上角的使用指南,把maven的配置粘到maven配置文件中即可,给的配置默认就是聚合仓库的。
常用配置
<mirror>
<id>aliyunmavenid>
<mirrorOf>*mirrorOf>
<name>阿里云公共仓库name>
<url>https://maven.aliyun.com/repository/publicurl>
mirror>
可以使用IDEA自带的maven,也可以使用自己下载的。
需要在IDEA没有打开项目的情况下配置,如果打开了项目,则maven配置只对该项目生效。
1、配置路径
2、配置参数
默认直接到远程仓库下载依赖,配置为:先在本地仓库中找,有就直接使用,没有才去远程仓库下载
-DarchetypeCatalog=internal
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
以上3部分组成依赖的坐标,唯一标识一个依赖。
scope可选,指定依赖作用域(作用时机)
maven仓库有两种类型
maven会根据项目版本号(pom.xml中设置的version)中是否带有 -SNAPSHOT来判断版本类型,快照版在 mvn deploy 时会自动推送到快照仓库中,发行版在 mvn deploy 时会自动推送到发行仓库中。
使用maven打包时,如果项目是快照版,即使未修改依赖的版本号,maven每次都会从远程快照仓库中拉取最新的(快照)依赖进行构建;如果项目时发行版,则对于本地仓库中已有的依赖,maven会使用直接使用,不会再从远程仓库中获取。所以公共类库每次发行正式版时,一定要区分版本号,不要重复使用历史版本号。
导入了同一个依赖的多个jar包时
mvn -v或version #查看maven版本
mvn clean #清理,删除target文件夹(之前编译、打包产生的文件)
mvn compile #编译
mvn test #测试
mvn package #打包为jar或war(取决于pom.xml中的打包配置)
mvn install #安装,把jar包放到本地仓库中
mvn deploy #部署
总结:将.mvn、HLEP.md、mvnw、mvnw.cmd删掉,只保留.idea、src、.gitignore、.iml、pom.xml,看起来清爽一些
经常要把一个项目拆分为多个模块进行开发,比如微服务。2种方式
<groupId>com.chygroupId>
<artifactId>mallartifactId>
<version>1.0.0version>
<description>Demo project for Spring Bootdescription>
<packaging>pompackaging>
<modules>
<module>eureka-servermodule>
<module>api-gatewaymodule>
<module>user-servermodule>
<module>order-servermodule>
modules>
<properties>
<java.version>1.8java.version>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
properties>
这个问题常见于拉取别人的项目,在pom.xml中手动添加maven仓库配置即可
<repositories>
<repository>
<id>nexus-aliyunid>
<name>nexus-aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>
如果还是不行,新建了一个maven项目,看是否从阿里的镜像仓库下载依赖、是否连接到阿里的仓库。
这种情况常见于引入mvn install安装到本地的jar包,可以从以下方面考虑
.lastUpdated文件是从远程maven仓库下载jar包失败生成的,可以用everything搜索 .lastUpdated ,然后全选删除,也可以运行下面的脚本删除
cleanLastUpdated.bat(win版)
@echo off
rem 此处设置maven仓库的路径
set REPOSITORY_PATH=D:\maven-repository
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
echo %%i
del /s /q "%%i"
)
pause
rem是注释语句
cleanLastUpdated.sh(linux版)
# 此处设置maven仓库的路径
REPOSITORY_PATH=/usr/local/maven/repository
echo 清理中...
find $REPOSITORY_PATH -name "*lastUpdated*" | xargs rm -fr
echo 清理完毕
解决方式:在pom.xml中添加以下任一种配置即可,一般都要在pom.xml中显式指定jdk版本的
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.1version>
<configuration>
<source>1.8source>
<target>1.8target>
configuration>
plugin>
plugins>
build>
在IDEA的项目结构、设置中修改也可以,但治标不治本
有人说 IDEA 2020版取消了maven的自动导入,修改pom.xml后,只能手动Reimport,这种说法不对。
IDEA 2020版只是默认禁用了Maven的自动导入,点击右上角的Maven,勾选自动导入即可
原因:项目实际使用的jdk版本和配置的jdk版本不一致
解决方式:检查以下各处配置的jdk版本是否一致
跳过单元测试有4种方式
方式一
pom.xml,配置maven
<properties>
<maven.test.skip>truemaven.test.skip>
properties>
方式二
pom.xml,添加插件
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<configuration>
<skipTests>trueskipTests>
configuration>
plugin>
方式三
命令打包设置参数
mvn clean install -Dmaven.test.skip=true
原因是没有指定json-lib要使用的jdk版本,使用
<dependency>
<groupId>net.sf.json-libgroupId>
<artifactId>json-libartifactId>
<version>2.4version>
<classifier>jdk13classifier>
<scope>compilescope>
dependency>
原因是配置的jdk版本和实际使用的不一致,检查pom.xml、IDEA中配置的jdk版本
可以在命令行终端执行命令,会打印出具体的错误信息(info级别的执行日志);
如果还不好排查问题,可以在命令末尾加参数 -X,会打印出debug级别的执行日志。
在pom.xml的根目录
<repositories>
<repository>
<id>xxxid>
<url>http://xxx/repository/publicurl>
<releases>
<enabled>trueenabled>
<updatePolicy>alwaysupdatePolicy>
releases>
<snapshots>
<enabled>trueenabled>
<updatePolicy>alwaysupdatePolicy>
snapshots>
repository>
repositories>