是Spring以及Maven的双重新手,但是要使用这两种技术,开始在在MacPro中下载使用Spring Tool Suite 3.8.1.RELEASE,其中自带了Maven,但是在使用过程中发现问题不断。例如,创建普通的项目,就会报错类似如下的问题:
Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:2.5
Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:2.5
上网搜索各种解决方案,发现解决方案都是删除本地库中的相关jar包重新下载以及加上其它配置等方式,例如下面的这篇文章: maven新建项目时报错,以及其它。
但是很奇怪,STS本就是新装上,maven还没有联网下载相关jar包,后来考虑到是不是eclipse自带的插件的问题,从官网上下载maven,解压之后,重新配置,主要是两个地方:
1:安装目录;
2:settings.xml配置文件修改
步骤可以参考:STS中配置独立 MAVEN
然后右键项目,在Maven菜单项下执行 update,但是最后还是有问题没有解决,读了一下报错信息,发现是在本地库以及远程库都没有找到相关jar包,这就考虑,是连接远程库有问题,搜索之后发现下面这篇文档给出来说明:
Eclipse创建maven项目时报错:maven-resources-plugin:2.5 or one of its dependencies could not be resolved,主要就是在setting.xml中添加:
然后去搜索了一下mirror到底是什么?
<mirror>
<id>Central</id>
<url>http://repo1.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
然后去搜索了一下mirror到底是什么?
下面的介绍就非常简单明了了:Maven里面mirror元素和repository元素的作用,主要答案如下:
简单点来说,repository就是个仓库。maven里有两种仓库,本地仓库和远程仓库。远程仓库相当于公共的仓库,大家都能看到。本地仓库是你本地的一个山寨版,只有你看的到,主要起缓存作用。当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。如果有则直接返回,否则会向远程仓库请求,并做缓存。你也可以把你做的东西上传到本地仓库给你本地自己用,或上传到远程仓库,供大家使用。
远程仓库可以在工程的pom.xml文件里指定,楼上两位已经列的很清楚了。如果没指定,默认就会把下面这地方做远程仓库,即默认会到http://repo1.maven.org/maven2这个地方去请求插件和依赖包。
Xml代码 收藏代码
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
</repository>
本地仓库默认在你本地的用户目录下的.m2/repository目录下。
mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径。比如,上班的时候在公司,用电信的网络,连的是电信的仓库。回到家后,是网通的网络,我想连网通的仓库,就可以通过mirror配置,统一把我工程里的仓库地址都改成联通的,而不用到具体工程配置文件里一个一个地改地址。
mirror的配置在.m2/settings.xml里。如:
Xml代码 收藏代码
<mirrors>
<mirror>
<id>UK</id>
<name>UK Central</name>
<url>http://uk.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
这样的话,就会给上面id为central的远程仓库做了个镜像。以后向central这个仓库发的请求都会发到http://uk.maven.org/maven2而不是http://repo1.maven.org/maven2了。
<mirrorOf>central</mirrorOf>里是要替代的仓库的id。如果填*,就会替代所有仓库。
参考资料:
http://maven.apache.org/guides/introduction/introduction-to-repositories.html
http://maven.apache.org/guides/mini/guide-mirror-settings.html
使用开源的灵活定制的东西,会遇到各种麻烦,肯定不如商业产品,对各种环境都有非常好的兼容,对于开源的东西,就只能见招拆招了,不过一般百度一下,或者stackoverflow一下,再加上自己推测尝试,一般都是会解决问题。但是说实话,真的是会比商业软件耗费时间。