Maven-FAQ

作者: 裤lue | 来源:发表于2018-08-04 22:22 被阅读14次

在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项目3

Maven有哪些常用命令

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有以下几种依赖范围了,分别可以让依赖作用于特定的环境:

  1. compile:编译依赖范围。这也是默认范围。它对编译、测试、运行时三种classpath都有效。
  2. test:测试依赖范围。它只对测试classpath有效。
  3. provided:已提供依赖范围。它对编译、测试classpath有效,对运行时无效。
  4. runtime:运行时依赖范围:它只对运行时classpath有效。
  5. 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中先声明的依赖优先被使用,这是依赖调解第二原则。

一些最佳实践

  1. 使用<exclusion>排除依赖,确保同一个项目里只使用一个版本的jar包,避免jar包版本冲突。
  2. 定义全局version信息,统一spring组件的版本
  3. 一些有用的依赖树查询命令:
    1. mvn dependency:list获得当前项目的已解析依赖,即生效的依赖。
    2. mvn dependency:tree获取依赖树,用于分析某个依赖是通过哪条传递路径引入的。
    3. mvn dependency:analyze分析依赖树,用于获得“已使用但未显示依赖的组件”,"未使用但已显示依赖的组件"。

相关文章

  • Maven-FAQ

    在Windows下安装、配置Maven 第一步:下载maven 第二步:环境变量中配置MAVEN_HOME:D:\...

  • Maven-FAQ

    DependencyManagement管理依赖时,在子module不指定version,maven报错unkno...

网友评论

    本文标题:Maven-FAQ

    本文链接:https://www.haomeiwen.com/subject/hhkvvftx.html