Maven-FAQ
2018-08-04 本文已影响14人
裤lue
在Windows下安装、配置Maven
第一步:下载maven
第二步:环境变量中配置MAVEN_HOME:D:\developer\software\maven\apache-maven-3.3.9
第三步:环境变量中配置Path:%MAVEN_HOME%\bin;
第四步:在cmd中检查Maven环境变量是否配置正确:mvn -v
在Mac下安装、配置maven
第一步:下载maven
第二步:配置环境变量
#打开iTerm输入
touch ~/.bash_profile
vi ~/.bash_profile
## 输入
export MAVEN_HOME=/Users/lynmonade/Documents/Software/maven/apache-maven-3.5.4
export PATH=$PATH:$MAVEN_HOME/bin
## 环境变量生效
source ~./bash_profile
## 检查Maven版本
mvn -v
## 检查Maven配置路径
echo $MAVEN_HOME
修改本地仓库位置
仓库默认位置是C:\Users\用户名\.m2\
目录。
修改%MAVEN_HOME%\conf\settinng.xml
的文件以更改jar包的下载位置。该文件是Maven的全局配置文件:
<localRepository>D:\workspace\repository</localRepository>
修改远端仓库位置
修改`%MAVEN_HOME%\conf\settinng.xml实现从阿里云下载jar文件:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
让eclipse使用你的Maven
eclipse自带了maven插件,只需要配置一下maven插件让其指向你本地的maven即可。Window--Preferences-Maven--Installations-->Add:选择你安装的maven
。
创建基于Maven的JaveWeb项目
第一步:创建Maven项目。
File-->Maven-->Maven Project-->maven-archetype-webapp
第二步:设置Group Id、Artifact Id、Package。
- Group Id:公司名称,一般分为两段(等价于包名,比如com.lyn)。比如tomcat的Group Id是org.apache
- Artifact Id:项目名称
- Package:手工设置为与Group Id一样
第三步:生成用于存放Java源文件的文件夹。
创建Maven项目2第四步:生成与Group Id一致的包名。
创建Maven项目3Maven有哪些常用命令
mvn clean compile
mvn clean test
mvn clean package
mvn clean install
# 把依赖从classPath中删除。当你修改pom.xml后建议执行该命令
mvn eclipse:clean
# 转为eclipse项目,并下载jar包,编译项目
mvn eclipse:eclipse
# 生成target,并放到repository,这样的话,其他工程才能依赖该工程
mvn install
# 只生成target,不放到repository
mvn package
声明编译等级
声明main函数路径
在eclipse中执行复杂的mvn命令
项目右键选择Run as..,Goals填写clean test
实现mvn clean test
。
dependency标签详解
其下有如下子元素:
- groupId、artifactId、version:必填
- exclusions:排除传递性依赖。选填。
- scope:依赖作用的范围。
- type:依赖的打包方式,jar/war。选填,很少用,因为默认都是用jar格式。
- optional:标记依赖是否可选。选填,很少用。
依赖的范围
Java项目有三种classpath环境:编译、测试、运行。
maven有以下几种依赖范围了,分别可以让依赖作用于特定的环境:
- compile:编译依赖范围。这也是默认范围。它对编译、测试、运行时三种classpath都有效。
- test:测试依赖范围。它只对测试classpath有效。
- provided:已提供依赖范围。它对编译、测试classpath有效,对运行时无效。
- runtime:运行时依赖范围:它只对运行时classpath有效。
- system:系统依赖范围:它对编译、测试classpath有效,且专用于引入本地环境变量所能访问到的jar包,比如
<systemPath>${JAVA_HOME}/lib/rt.jar</systemPath>
依赖调解
例如项目A有如下依赖关系:A-->B-->C--X(1.0)、A-->D--X(2.0)。这时会优先选择X(2.0),因为其依赖路径更短,这是依赖调解第一原则。
如果依赖路径长度相同,则在pom.xml中先声明的依赖优先被使用,这是依赖调解第二原则。
一些最佳实践
- 使用
<exclusion>
排除依赖,确保同一个项目里只使用一个版本的jar包,避免jar包版本冲突。 - 定义全局version信息,统一spring组件的版本
- 一些有用的依赖树查询命令:
-
mvn dependency:list
获得当前项目的已解析依赖,即生效的依赖。 -
mvn dependency:tree
获取依赖树,用于分析某个依赖是通过哪条传递路径引入的。 -
mvn dependency:analyze
分析依赖树,用于获得“已使用但未显示依赖的组件”,"未使用但已显示依赖的组件"。
-