使用SVN搭建Maven仓库
<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服务器,进而可避免管理服务器备份,验证。硬件设备投入
?