一般来说,在Maven项目目录下,没有诸如lib/这样用来存放依赖文件的目录。当Maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。
默认情况下,不管是在Windows还是Linux上,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。例如,笔者的用户名是juven,我在Windows机器上的本地仓库地址为C:/Users/juven/.m2/repository/,而我在Linux上的本地仓库地址为/home/juven/.m2/repository/。注意,在Linux系统中,以点(.)开头的文件或目录默认是隐藏的,可以使用ls-a命令显示隐藏文件或目录。
有时候,因为某些原因(例如C盘空间不够),用户会想要自定义本地仓库目录地址。这时,可以编辑文件~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址。例如:
这样,该用户的本地仓库地址就被设置成了D:/java/repository/。
需要注意的是,默认情况下,~/.m2/settings.xml文件是不存在的,用户需要从Maven安装目录复制$M2_HOME/conf/settings.xml文件再进行编辑。本书始终推荐大家不要直接修改全局目录的settings.xml文件,具体原因已在第2.7.2节中阐述。
一个构件只有在本地仓库中之后,才能由其他Maven项目使用,那么构件如何进入到本地仓库中呢?最常见的是依赖Maven从远程仓库下载到本地仓库中。还有一种常见的情况是,将本地项目的构件安装到Maven仓库中。例如,本地有两个项目A和B,两者都无法从远程仓库获得,而同时A又依赖于B,为了能构建A,B就必须首先得以构建并安装到本地仓库中。
在某个项目中执行mvn clean install命令,就能看到如下输出:
install插件的install目标将项目的构建输出文件安装到本地仓库。在上述输出中,构建输出文件是account-email-1.0.0-SNAPSHOT.jar,本地仓库地址是D:/java/repository,Maven使用Install插件将该文件复制到本地仓库中,具体的路径根据坐标计算获得。计算逻辑请参考6.2节。