使用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上,如下:

 

<build>
  <plugins>
    <plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-deploy-plugin</artifactId>
	<version>2.7</version>
	<dependencies>
  	  <dependency>
	  <groupId>com.google.code.maven-svn-wagon</groupId>
	  <artifactId>maven-svn-wagon</artifactId>
	  <version>1.4</version>
	  </dependency>
	</dependencies>
      </plugin>
  </plugins>
</build>

 

 

接着配置用于存储的Maven仓库地址,注意仓库地址前面添加了“svn:”前缀,如下:

注意:如果Maven仓库地址包含中文,在某些操作系统上可能不支持,从而导致不能访问Maven仓库。如果出现此情况,需要对仓库地址进行URL编码转换。一个简单的方法是把地址(不包含svn:前缀)复制到Firefox浏览器地址栏进行访问,然后再复制回下面配置,此地址即为URL编码后的地址

 

<distributionManagement>
  <repository>
	<id>my-svn-repository</id>
	<name>My SVN Repository</name>
	<url>svn:http://mysvn/MavenRepository</url>
  </repository>
</distributionManagement>

 

 

4.右键点击hello-maven-lib项目-->Run As-->Maven build..,在弹出框输入deploy,接着点击Run按钮。即可把项目发布到SVN上的Maven仓库。

注:下次运行时,可直接点击Eclipse工具条上的Run As..按钮运行。

 

 

5.如果访问SVN需要验证,可以修改.m2/settings.xml,添加如下验证信息(id需要与前面配置的Maven仓库id对应):

 

<servers>
  <server>  
	<id>my-svn-repository</id>  
	<username>your_user_name</username>  
	<password>your_password</password>  
  </server>	 	
</servers>

 

 

6.修改hello-maven-app项目的pom.xml,首选添加仓库配置,以便本项目能访问此仓库里的库文件:

注:仓库地址不需要添加“svn:”前缀。如果仓库地址包含中文,可能需要进行URL编码转换

 

<repositories>
	<repository>
		<id>>my-svn-repository</id>
		<name>My SVN Repository</name>
		<url>http://mysvn/MavenRepository/</url>
		<releases>
			<enabled>true</enabled>
			<updatePolicy>always</updatePolicy>
		</releases>
		<snapshots>
			<enabled>true</enabled>
			<updatePolicy>always</updatePolicy>
		</snapshots>
	</repository>
</repositories>

 

 

接着添加对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发布的库文件

<dependency>
	<groupId>com.bingo.hello</groupId>
	<artifactId>hello-maven-lib</artifactId>
	<version>0.0.1</version>
</dependency>

 

 

接着右键点击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项目时,可以同时发布项目源码,配置如下:

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-source-plugin</artifactId>
	<version>2.2.1</version>
	<executions>
		<execution>
			<id>attach-sources</id>
			<phase>verify</phase>
			<goals>
				<goal>jar-no-fork</goal>
			</goals>
		</execution>
	</executions>
</plugin>

 

 

如果要发布项目的javadoc,配置如下:

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-javadoc-plugin</artifactId>
	<version>2.9</version>
	<executions>
		<execution>
			<id>attach-javadocs</id>
			<goals>
				<goal>jar</goal>
			</goals>
		</execution>
	</executions>
</plugin>

 

 

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,可能严重影响你的项目的编译速度

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>2.8</version>
				<executions>
					<execution>
						<id>download-sources</id>
						<phase>test</phase>
						<goals>
							<goal>sources</goal>
						</goals>
					</execution>
					<execution>
						<id>download-javadoc</id>
						<phase>test</phase>
						<goals>
							<goal>resolve</goal>
						</goals>
						<configuration>
						    <classifier>javadoc</classifier>
						</configuration>					    
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

 

 

总结-缺点:

1.不支持索引

2.不适合管理大量的依赖库文件

 

总结-优点:

1.如果已有SVN仓库,那么搭建Maven仓库将非常便捷

2.可避免搭建Nexus服务器,进而可避免管理服务器备份,验证。硬件设备投入

 

你可能感兴趣的:(maven)