如果使用前面给出的pom文件,大家肯定会发现有很多问题,好多依赖找不到,为什么呢?因为这些jar包的版本都是比较高,但是Maven服务器上更新又慢,所以才导致找不到。
除了Maven官方仓库更新慢这个原因,从项目组考虑其实我们都应该要拥有自己的Maven仓库了,俗称Maven私服。
1)Maven官方仓库更新慢,如果要用到新版本的jar,下载不了。在pom文件中的依赖可能就要用到<scope>system</scope>来指定本地的jar,这样对维护来说也成问题。
2)项目组可能会有多个项目,为了今后能统一管理,依赖也需要统一,如果大家各顾各去发展,到头再去管理难上加难,倒不如前期就把好关。
3)如果项目之间存在依赖,通过仓库去解决比直接在lib下应用jar方便的多,而且容易更新。
再想,自己脑袋瓜子也有限,但是我们的的确确有必要搭建自己的Maven私服了。我们这次选中了apache官方的一个实现----Archiva。
1)去http://archiva.apache.org/下载archiva,版本号Archiva 1.2-M1
2)解压至d:\ apache-archiva-1.2-M1,后续用${archiva.home}来代替根目录
3)运行 archiva install 安装archiva服务,目录${archiva.home}\bin
1)运行 archiva start ,如果把${archiva.home}\bin追加到${PATH}中,那么在任何地方都可以运行。
2)设置必要的admin密码等等操作,略过。
1)菜单Repositories下添加Remote Repositories ,比如http://repository.jboss.com/maven2
2)如果需要通过代理链接外网,那么在菜单下Network Proxies添加Network Proxies。
3)菜单Proxy Connectors下添加Repository Proxy Connectors,Network Proxy选择刚才添加的proxy,Managed Repository选择internal,Remote Repository选择刚才添加的repository。
4)照此方式陆续添加http://repository.codehaus.org/ 等Maven仓库,当然一定要包括Maven的官方仓库http://repo1.maven.org/maven2/
5)如果不希望用户密码失效,那么修改${archiva.home}\apps\archiva\WEB-INF\lib\redback-configuration-1.2-beta-1.jar的config-defaults.properties,修改security.policy.password.expiration.enabled=false,里面还有好多配置项,比如超时时间,密码重复次数等等,大家可以根据自己的喜好修改。
6)顺便说一下,Archiva不支持NTLM的Proxy,Archiva内部也是用Wagon去获取依赖的,所以也可以说是Maven本身就不支持NTLM的Proxy。但是,我们可以使用Proxy to Proxy的方式去做,参考http://docs.codehaus.org/display/MAVENUSER/Configuring+Maven+behind+an+NTLM+proxy,有兴趣的可以去试一下。
1)菜单下Upload Artifact添加自己的jar,或者Maven仓库中没有的jar。
2)其他的输入框很明确,需要注意的是Classifier这个输入框。如果是上传文档,那么就填写javadoc;如果是上传对应的代码,那么就填写sources,其他情况不填。
3)如果要上传大小大于2M的jar,那么需要修改${archiva.home}\apps\archiva\WEB-INF\classes\struts.properties,修改struts.multipart.maxSize=3145728。这个是3M的大小,如果还觉得不够可以自己修改更大值。
因为archiva的仓库建立在${archiva.home}\data\repositories\internal目录下,所以在setting.xml中指定localRepository时,就可以直接指向该目录,可以节省空间。当然,如果archiva的服务不在本地时,Maven还是需要指定一个存放仓库的目录。
mirror的配置<mirrorOf>*</mirrorOf>告诉maven,镜像所有的profile,都从<url>http://localhost:8080/archiva/repository/internal</url>这个地方获取依赖。