默认情况下,maven将在repo.maven.apache.org和hk.maven.org下载依赖包,这是仓库中心。
首次使用时,会自动联网从仓库中心下载,在本地仓库留存副本,下一次就会直接在本地仓库查找,如果找不到(被清理了),再次到远程下载。
但是,远程仓库不太可能让我们共享自己的jar包,同时也存在着下载速度慢的问题,所以大多数公司有自己的maven仓库:
这样,通过依赖管理可以实现仓库共享,加速下载,版本管理。
常用的仓库管理工具有:
nexus repository OSShttp://www.sonatype.com/nexus-repository-ossapache archivahttp://archiva.apache.org/artifactory Open Sourcehttps://jfrog.com/open-source/#artifactory
- "1.0" encoding="UTF-8" ?>
- <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
- .......
- <profiles>
- <profile>
- <id>your_companyid>
- <repositories>
- <repository>
- <id>spring_repoid>
- <url>http://repo.spring.io/release/url>
- repository>
- <repository>
- <id>jboss_repoid>
- <url>https://repository.jboss.org/url>
- repository>
- repositories>
- profile>
- profiles>
-
- <activeProfiles>
- <activeProfile>your_companyactiveProfile>
- activeProfiles>
- .......
- settings>
这里通过profiles目录配置局域网仓库,单个仓库配置使用id进行标记唯一性。通过repositories配置仓库,仓库通过id和url配置唯一键和仓库地址。最后在activeProfiles中配置激活的仓库配置,使用profile的唯一id作为指定。
- <dependencies>
- <dependency>
- <groupId>org.hibernategroupId>
- <artifactId>hibernate-toolsartifactId>
- <version>5.4.2.Finalversion>
- dependency>
- dependencies>
依赖有几个基本属性:
groupId: 公司或组织id
artifactId: 项目的唯一id
version:版本号
type:指定打包方式,JAR、WAR、EAR
通常,迭代开发版本带有SNAPSHOT标记,RELEASE为发行版本,FINAL为最终稳定版本。
直接依赖就是你在项目中直接指定的依赖,传递依赖就是你直接依赖的项目所依赖的其他项目。
依赖发生冲突时,会采用最近原则:
1. 项目中使用的B存在两个版本,0.0.8和1.0.0,其中0.0.8是直接依赖,因此最终版本的0.0.8
2. 同级的版本以来,以最先发现的版本为准,例如F存在1.0.0和2.0.0和2.2.0三个版本,则以最先出现的1.0.0为准。
3. 如果你必须使用2.2.0版本的F,那就需要在项目中显示指定版本,这样可以满足最近原则。
mvn dependency:tree
对于不想使用的依赖,可以采用exclusion进行依赖排除。
有的依赖不需要再编译期间使用,有的不需要运行期间使用,可以通过scope指定依赖的适用范围。
范围 | 含义 |
compile | 适用于编译、测试、运行全阶段,默认是这个 |
runtime | 仅运行时 |
test | 测试有效 |
system | 编译、测试有效,引用文件系统内的依赖文件 |
provided | 编译、测试有效,不会被打包 |
import | 适用于对pom的引用 |
mvn install:install-file -DgroupId=com.apress.gswmbook -DartifactId=test -Dversion=1.0.0 -Dfile=C:\apress\gswm-book\chapter3\test.jar -Dpackaging=jar -DgeneratePom=true
将会自动安装到本地的仓库: