如果你的项目比较小,并且你不想使用Nexus搭建Maven仓库,那么可以考虑使用SVN。本文介绍如何使用SVN搭建Maven仓库,SVN服务器的搭建和基本使用请自行搜索,开发环境搭建请参考本博客相关帖子,使用到的maven-svn-wagon插件请参考官方文档
1.搭建SVN服务器并创建SVN仓库,并创建两个Maven项目,如下:
SVN仓库 | 用于搭建Maven仓库,假设访问地址为:http://mysvn/ |
hello-maven-lib | Maven项目,此项目发布的库文件(jar包)将部署到SVN上的Maven仓库 |
hello-maven-app | Maven项目,此项目依赖hello-maven-lib发布的库文件(jar包) |
2.在SVN仓库里创建MavenRepository目录作为Maven仓库,其访问地址为http://mysvn/MavenRepository/
注1:可以使用TortoiseSVN访问SVN仓库并创建相关目录
注2:建议在MavenRepository里创建release和snapshot目录,分别用于部署release和snapshot版本的库文件。本文为了简便,仅使用一个目录
3.修改hello-maven-lib的pom.xml,首选配置使用maven-svn-wagon插件发布项目,此插件支持发布项目到SVN上,如下:
org.apache.maven.plugins maven-deploy-plugin 2.7 com.google.code.maven-svn-wagon maven-svn-wagon 1.4
接着配置用于存储的Maven仓库地址,注意仓库地址前面添加了“svn:”前缀,如下:
注意:如果Maven仓库地址包含中文,在某些操作系统上可能不支持,从而导致不能访问Maven仓库。如果出现此情况,需要对仓库地址进行URL编码转换。一个简单的方法是把地址(不包含svn:前缀)复制到Firefox浏览器地址栏进行访问,然后再复制回下面配置,此地址即为URL编码后的地址
my-svn-repository My SVN Repository svn:http://mysvn/MavenRepository
4.右键点击hello-maven-lib项目-->Run As-->Maven build..,在弹出框输入deploy,接着点击Run按钮。即可把项目发布到SVN上的Maven仓库。
注:下次运行时,可直接点击Eclipse工具条上的Run As..按钮运行。
5.如果访问SVN需要验证,可以修改.m2/settings.xml,添加如下验证信息(id需要与前面配置的Maven仓库id对应):
my-svn-repository your_user_name your_password
6.修改hello-maven-app项目的pom.xml,首选添加仓库配置,以便本项目能访问此仓库里的库文件:
注:仓库地址不需要添加“svn:”前缀。如果仓库地址包含中文,可能需要进行URL编码转换
>my-svn-repository My SVN Repository http://mysvn/MavenRepository/ true always true always
接着添加对hello-maven-lib的依赖,如下:
注1:如果两个项目在同一个Eclipse里,那么Eclipse可能自动配置hello-maven-app直接依赖hello-maven-lib项目,而不是依赖后者发布的jar包。为了避免此情况,在添加依赖前,可以先关闭hello-maven-lib项目
注2:如果两个项目使用同一个本地Maven仓库,因为部署hello-maven-lib项目时,会先安装到本地仓库。所以hello-maven-app项目添加依赖时,会发现本地仓库已经存在hello-maven-lib库文件,因此不会从SVN上的Maven仓库下载。如果要查看实际的下载效果,在添加依赖前,可以先删除本地仓库里的hello-maven-lib发布的库文件
com.bingo.hello hello-maven-lib 0.0.1
接着右键点击hello-maven-app项目-->Run As,分别运行Maven clean、Maven test。此时会发现Maven会自动从SVN仓库里下载依赖的jar包,并编译项目
注:如果Maven提示运行项目成功,但是Eclipse里仍然提示错误,这可能是Eclipse的m2e插件暂时不支持相关功能导致的,可以在Problem视图里右键点击这些错误直接删除
SVN上的Maven仓库是没有索引文件的,所以在添加依赖时搜索不到此仓库里已有的库文件。可以使用Nexus Indexer创建索引文件,但是我没有测试过,因为如果真的需要创建索引,为什么不直接使用Nexus服务器呢?所以SVN上的Maven仓库仅适合管理自己开发的简单的库文件,当需要添加这些依赖时,可以直接登录SVN查看相应的库文件信息并手工添加依赖
7.在发布hello-maven-lib项目时,可以同时发布项目源码,配置如下:
org.apache.maven.plugins maven-source-plugin 2.2.1 attach-sources verify jar-no-fork
如果要发布项目的javadoc,配置如下:
org.apache.maven.plugins maven-javadoc-plugin 2.9 attach-javadocs jar
8.可以配置Eclipse在下载Maven依赖时,同时下载依赖的源码和javadoc。点击Eclipse菜单项目Window-->Preferences-->Maven,勾选以下选项:
但是经测试,此方式不会下载SVN上Maven仓库里的依赖的源码。即使使用命令行方式运行mvn,添加-DdownloadSources=true参数,仍然不会下载源码。解决方法是右键点击hello-maven-app项目-->Run As-->Maven build...,在弹出窗配置以下运行命令,点击Run按钮即会下载依赖的源码和javadoc:
也可以对hello-maven-app的pom.xml 添加以下配置,在每次运行Maven test时自动下载依赖源码和javadoc
注:以下配置仅供参考,经测试,使用以下配置每次运行Maven test时都会下载所有依赖的javadoc,可能严重影响你的项目的编译速度
org.apache.maven.plugins maven-dependency-plugin 2.8 download-sources test sources download-javadoc test resolve javadoc
总结-缺点:
1.不支持索引
2.不适合管理大量的依赖库文件
总结-优点:
1.如果已有SVN仓库,那么搭建Maven仓库将非常便捷
2.可避免搭建Nexus服务器,进而可避免管理服务器备份,验证。硬件设备投入