Maven-FAQ

在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分析依赖树,用于获得“已使用但未显示依赖的组件”,"未使用但已显示依赖的组件"。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,282评论 6 342
  • 简介 概述 Maven 是一个项目管理和整合工具 Maven 为开发者提供了一套完整的构建生命周期框架 Maven...
    闽越布衣阅读 4,535评论 6 39
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,654评论 19 139
  • 春风三里点桃花, 新芽蓓蕾雨里发。 不比红梅印白雪, 雨打风吹无须夸。
    良柳如烟阅读 330评论 2 2
  • 兵哥最近手头上的工作非常多,基本上早上起床以后,要忙到凌晨3点多。 工作越多,我们会越焦虑,会越急躁。 那怎么解决...
    思维导图阅读 680评论 0 1

友情链接更多精彩内容