一、Maven简介
Apache Maven 是一个项目管理工具,可以对 Java 项目进行自动化的构建和依赖管理
Maven 官网地址是:https://maven.apache.org/index.html
1、Maven 仓库有三种类型:
- 本地仓库(local):顾名思义就是本地本机放置构件的地方。Maven 从远程仓库下载下来的构件都存放在本地仓库中,项目可以从本地 Maven 仓库中获取自己所依赖的文件。
- 中央仓库(central):Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。中央仓库是 Maven 官方提供的,可通过 http://search.maven.org/ 来访问。
- 远程私服(remote):私服一般是指公司内部使用的仓库。运行 Maven 时,Maven 所需要的任何构件都是从本地仓库获取的,但是如果本地仓库没有,它就会尝试从远程仓库中下载构件到本地仓库。如果 Maven 无法连接到远程仓库,将无法正常构建项目
2、Maven 依赖搜索顺序
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:
- 步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
- 步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
- 步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
- 步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。
3、Maven 中央仓库地址大全
1、阿里中央仓库
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
2、maven.apache.org 中央仓库
<repository>
<id>central-repos</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
3、spring.io 中央仓库
<repository>
<id>springsource-repos</id>
<name>SpringSource Repository</name>
<url>http://repo.spring.io/release/</url>
</repository>
4、Maven 标准项目目录示意图
5、Maven依赖冲突调解规则
第一原则:路径最近者优先
把当前模块当作顶层模块,直接依赖的包则作为次层模块,间接依赖的包则作为次层模块的次层模块,依次递推…,最后构成一棵引用依赖树。假设当前模块是A,两种依赖路径如下所示:
第二原则:第一声明者优先
若冲突依赖的路径长度相同,那么第一原则就无法起作用了。假设当前模块是A,两种依赖路径如下所示:
其它情况:覆盖策略
若相同类型但版本不同的依赖存在于同一个 pom 文件,依赖调解两大原则都不起作用,需要采用覆盖策略来调解依赖冲突,最终会引入最后一个声明的依赖。
二、常用命令
命令格式: mvn [plugin-name]:[goal-name]
-D 指定参数,如 -Dmaven.test.skip=true 跳过单元测试;
-P 指定 Profile 配置,可以用于区分环境;
-e 显示maven运行出错的信息;
-o 离线执行命令,即不去远程仓库更新包;
-X 显示maven允许的debug信息;
-U 强制去远程更新snapshot的插件或依赖,默认每天只更新一次。
命令 | 说明 |
---|---|
mvn archetype:create | 创建maven项目 指定 group: -DgroupId=packageName 指定 artifact:-DartifactId=projectName 创建web项目:-DarchetypeArtifactId=maven-archetype-webapp |
mvn archetype:generate | 创建maven项目 |
mvn validate | 验证项目是否正确 |
mvn package | maven 打包 |
mvn package -DskipTests | 打包不执行测试用例 |
mvn package -Dmaven.test.skip=true | 打包不执行编译测试用例 |
mvn jar:jar | 只打jar包 |
mvn source:jar | 生成源码jar包 |
mvn generate-sources | 产生应用需要的任何额外的源代码 |
mvn compile | 编译源代码 |
mvn test-compile | 编译测试代码 |
mvn test | 运行测试 |
mvn verify | 运行检查 |
mvn clean | 清理maven项目 |
mvn eclipse:eclipse | 生成eclipse项目 |
mvn eclipse:clean | 清理eclipse配置 |
mvn idea:idea | 生成idea项目 |
mvn install | 安装项目到本地仓库 |
mvn:deploy | 发布项目到远程仓库 |
mvn integration-test | 在集成测试可以运行的环境中处理和发布包 |
mvn dependency:tree | 显示maven依赖树 |
mvn dependency:list | 显示maven依赖列表 |
mvn dependency:sources | 下载依赖包的源码 |
mvn install:install-file -DgroupId=packageName -DartifactId=projectName -Dversion=version -Dpackaging=jar -Dfile=path | 安装本地jar到本地仓库 |
mvn archetype:help | archetype帮助命令 |
mvn archetype:crawl | 爬取一个maven仓库,创建目录文件 |
mvn archetype:create-from-project | 根据一个工程,创建一个新的archetype |
mvn archetype:generate | 根据一个archetype,创建一个新的工程 |
mvn archetype:jar | 根据当前的archetype工程,创建一个jar包 |
mvn archetype:update-local-catalog | 更新本地的maven目录 |
mvn dependency:sources -DdownloadSources=true -DdownloadJavadocs=true | 下载源码和文档 |
三、web项目相关命令
命令 | 说明 |
---|---|
mvn tomcat:run | 启动tomcat |
mvn jetty:run | 启动jetty |
mvn tomcat:deploy | 运行打包部署 |
mvn tomcat:undeploy | 撤销部署 |
mvn tomcat:start | 启动web应用 |
mvn tomcat:stop | 停止web应用 |
mvn tomcat:redeploy | 重新部署 |
mvn war:exploded tomcat:exploded | 部署展开的war文件 |
四、问题集合
1、maven 创建SpringMVC慢的解决方案
archetypeCatalog: internal
2、setting.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<localRepository>[本地路径]/.m2/repository</localRepository>
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
</settings>
3、内置Tomcat插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 指定端口 -->
<port>80</port>
<!-- 请求路径 -->
<path>/</path>
</configuration>
</plugin>