您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
03-Maven仓库介绍(基于maven的项目的maven编译、仓库配置)
发布时间:2022-10-05 17:38:53编辑:雪饮阅读()
maven本地仓库的默认位置
maven有本地仓库、远程仓库、中心仓库。
其中maven编译时候先从本地仓库判断是否有相应的依赖,然后没有的话就去中心仓库去拉取相应依赖到本地仓库,但是如果设置了一个仓库地址,一般默认是中心仓库,比如你设置一个阿里云的仓库,就叫做远程仓库,因为你从阿里云仓库拉取,而阿里云仓库的资源就是从中心仓库来的。
而maven本地仓库默认存储路径在maven安装目录conf/settings.xml中可以看到
Default: ${user.home}/.m2/repository
这样一句被注释掉的内容,意思就是在当前用户家目录下的.m2/repository
例如你当前用的是adminstrator账户,则目录为:
C:\Users\Administrator\.m2\repository
验证maven本地仓库的默认位置及maven项目的编译
C:\Users\Administrator\.m2\repository目录未必会有,如果之前有被静默使用过maven则可能会有,否则你没有主动用过,则未必会有。
那么我这里是有这个目录的。
那么我这里目前是有一个junit,版本是4.12
C:\Users\Administrator\.m2\repository\junit\junit\4.12
如果下这个maven项目示例中有使用到依赖是junit 4.9的
在这个项目pom.xml中有部分定义如:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
那么本地仓库的依赖一般是要通过编译某个基于maven的项目的。
那么以这个示例的maven项目,则我们进入解压某的目录中执行mvn compile
即可编译该maven项目。
如:
C:\Users\Administrator>cd D:\software\apache-maven-3.6.0-bin\apache-maven-3.6.0\maven-helloworld-web
C:\Users\Administrator>d:
D:\software\apache-maven-3.6.0-bin\apache-maven-3.6.0\maven-helloworld-web>mvn compile
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for cn.itcast.maven:maven-helloworld:war:0.0.1-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 37, column 12
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------< cn.itcast.maven:maven-helloworld >------------------
[INFO] Building 第一个maven工程 0.0.1-SNAPSHOT
…中间等了好久
然后成功后出现如下:
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/collections/google-collections/1.0/google-collections-1.0.jar (640 kB at 175 kB/s)
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\software\apache-maven-3.6.0-bin\apache-maven-3.6.0\maven-helloworld-web\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:23 min
[INFO] Finished at: 2022-10-05T17:11:32+08:00
[INFO] ------------------------------------------------------------------------
这个时候你就可以找到如这样的一个目录
C:\Users\Administrator\.m2\repository\junit\junit\4.9
也就是对应junit4.9的了。
成功添加了这个junit4.9的依赖了。
并且也正好验证了上面的默认maven本地仓库目录了。
修改默认本地maven仓库
解禁<localRepository>/path/to/local/repo</localRepository>的注释于maven安装目录conf/settings.xml
并修改如:
<localRepository>D:\software\apache-maven-3.6.0-bin\apache-maven-3.6.0\maven_repository</localRepository>
然后像上面一样重新编译下刚才的示例项目。
就可以在自定义的这个maven repository中有了依赖包了。
配置私服仓库地址(远程仓库)
上面有介绍远程仓库和中心仓库,中心仓库就是官方的,远程仓库就是非官方的,远程仓库一般的也叫私服仓库。
由于一般的我们直接从中心仓库拉取相关依赖可能会比较慢,毕竟在国外。
而阿里云就做了一个国内的私服远程仓库。
那么不同的远程仓库镜像是不同的,阿里云的镜像如:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
把这个配置同样也增加于maven安装目录的conf/settings.xml中mirrors节点中(如是这样,则应是支持多个maven仓库配置的)。
那么再次编译maven项目(应该需要手动删除下刚才上面编译好后的那个本地maven仓库里面的东西,我这里直觉的就删除了,应该是判断本地仓库有了就不会再次请求吧)
可以看到局部如:
Downloaded from alimaven: http://maven.aliyun.com/nexus/content/groups/public/junit/junit/3.8.2/junit-3.8.2.jar (121 kB at 23 kB/s)
Downloaded from alimaven: http://maven.aliyun.com/nexus/content/groups/public/com/google/collections/google-collections/1.0/google-collections-1.0.jar (640 kB at 121 kB/s)
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:36 min
[INFO] Finished at: 2022-10-05T17:31:22+08:00
[INFO] ------------------------------------------------------------------------
可以看到是从aliyun进行downloaded的,也就是说已经配置成功了阿里云的私服远程maven仓库了。
手动管理maven本地仓库
在某种情况下,比如有两个电脑都没有网络,但其中一个电脑上有编译过maven项目,则其本地仓库里面肯定是有对应项目的依赖的。
但另外一台电脑也用同样项目的依赖,则据说可以直接复制下那个编译好了的maven项目的本地仓库里面的这些文件以实现此需求,不过就算是能,我建议最好不要全部复制吧,可能会出现版本冲突(万一有人为修改就更坑了),尽量只复制自己缺少的那部分依赖。
关键字词:Maven,仓库,介绍,项目,maven,编译,配置