目录
摘要
maven简单安装步骤
maven构建速度慢的问题
maven仓库的依赖搜索顺序
maven的镜像问题
maven构建项目jdk版本过低问题
总结
参考文献
摘要
Maven(Yiddish word 意地绪语 犹太人使用的语言,意思是知识聚合器) 是一个项目管理和构建自动化工具。这里记录下使用过程中遇到的一些问题及解决方法。阅读本文需要对maven有基本的认识和使用经验。
maven简单安装步骤
- 下载解压
- 环境变量设置
- 修订settings.xml文件
- 仓库位置修订
- 镜像地址修订
- jdk版本修订
maven构建速度慢的问题
用maven构建项目骨架时,速度非常慢,无论是在命令行中直接使用,还是在IDE中使用。是什么原因导致的呢?
假设我们来构建一个test项目,命令如下:
mvn archetype:generate -DgroupId=com.test -DartifactId=test -DarchetypeArtifactId=maven-archetype-quickstart -X
在命令的末尾加了一个参数 -X ,这样就可以看见构建的整个过程。
发现构建到过程停留在一个文件的查询上,如下图显示
于是我们就想能不能把这个文件下载到本地,不用每次构建都去远程查询呢?答案是肯定的。
我们只要把这个文件下载来下来 http://repo.maven.apache.org/maven2/archetype-catalog.xml
放到maven本地仓库配置所在目录下
比如配置如下仓库:
则文件archetype-catalog.xml放置在D:\data.m2\repo\archetype-catalog.xml
然后在每次构建项目,运行构建命令的时候,添加参数 -DarchetypeCatalog=local ,例子如下
mvn archetype:generate -DgroupId=com.test -DartifactId=test -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeCatalog=local -X
local表示~/.m2/repo/archetype-catalog.xml catalog文件.
remote表示http://repo.maven.apache.org/maven2/archetype-catalog.xml catalog文件.
构建速度明显加快了不少。当然archetypeCatalog还有其他配置方式,这里不细说,可以参考官方文档的说明。
maven仓库的依赖搜索顺序
目前有两种说。
第一种Maven 依赖搜索顺序
local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror (注意如果有配置mirror是不会在在去搜索central) >central(没有配置mirror这最后是搜索中央仓库)
1、本地仓库
2、maven settings profile中的repository;
3、pom.xml中profile中定义的repository;
4、pom.xml中的repositorys(定义多个repository,按定义顺序找);
5、mirror
# 可是,如果mirrorOf设置为星号(*),那么其他仓库配的地址,都会失效了,以这个为准
<mirrors>
<mirror>
<id>my_mirror</id>
<name>my_mirror</name>
<url>http://nexus.xx.yy/nexus/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
第二种Maven 依赖搜索顺序
步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)
maven的镜像问题
- 什么是镜像?
简单理解,就是镜像是一个仓库的副本或者拷贝。
- 使用镜像和不使用镜像的区别
没有配置mirror情况:
配置mirror使用的情况:
- 配置镜像的目的
镜像可以比作拦截器,一般是出于访问速度和下载速度考虑。
例如我请求仓库A下载构建,但是A仓库的网络下载太慢,这时给A仓库配置了一个镜像A_mirror,这时我就去镜像A_mirror下载构件,解决A仓库网络不好问题
- 应用
目前国内我找到比较好的镜像是阿里
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
其中< mirrorOf >central< /mirrorOf >中指的就是默认maven中央仓库的id,这个配置就解决了maven中央仓库在国外,下载构件或插件网速慢的问题。
maven构建项目,jdk版本过低问题
如果你用eclipse建立maven项目时,新建的项目往往JDK版本很低——1.5!怎么办?
- 方式一 修改settings.xml文件,添加如下配置:
<profile>
<id>jdk-1.6</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.6</jdk>
</activation>
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
<maven.compiler.compilerVersion>1.6</maven.compiler.compilerVersion>
</properties>
</profile>
方式二 在项目中的pom.xml指定jdk版本,如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
片段
快速创建简单java工程和web工程的命令:
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
常用插件
maven-enforcer-plugin
总结
文章主要就罗列一些使用maven中遇到比较影响构建速度的问题,不涉及maven的概念和使用,这些请自行搜索学习。