使用SVN搭建Maven仓库

如果你的项目比较小,并且你不想使用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服务器,进而可避免管理服务器备份,验证。硬件设备投入

 

你可能感兴趣的:(Maven)