前些日子研究了CI的具体流程,在过程遇到许多意料以外的困难,如今终于爬出坑,特此将经验分享给你们,但愿你们少走写弯路html
须要:java
JDK1.5及以上版本web
tomcatspring
Hudsonapache
svnjson
Mavenapi
Nexus(作Maven远程仓库用,非必须)tomcat
sonareclipse
eclipsemaven
1.SVN
svn的搭建就不提了,你们请自行搜索
2.Maven
首先去官网http://maven.apache.org/download.cgi下载maven,将下载的文件解压,而后配置maven环境
新建变量:
变量名:M2_HOME
变量值:D:\maven-3.2.3\apache-maven-3.2.3
找到path,加入;%M2_HOME%\bin;
运行cmd,输入mvn -v
ok,第一步完成;
maven仓库用来存放咱们项目依赖的jar包,maven默认的仓库路径是(你本身的user路径)/.m2/repository,咱们可不想某天重装系统的时候把这里面的东西清空,因此咱们须要修改仓库路径,首先建立一个你本身的仓库文件(例如个人D:\maven\repo),而后打开(你本身的maven路径)\apache-maven-3.2.3\conf,找到setting.xml文件,在里面找到<localRepository>,改为你本身的仓库路径。
完成以后cmd运行mvn help:system;若是运行过程当中无错,咱们会在本身的仓库文件中发现已经多了不少文件,这些文件就是maven从中央库下载下来的。
PS:
若是用Eclipse做为IDE的话(或许intelliJ会更好?),去安装m2e(eclipse支持maven的插件),有离线和在线安装两种方式,就和安装其余的插件方法相似。
安装完成后就能够去建立项目或将已有项目弄到maven上来,对于新建立项目,你们能够去查阅虫师写的文章《maven环境快速搭建》,文章介绍了从cmd建立maven项目,你们也能够在eclipse(已安装m2e插件)里直接建立maven project;这里由于我是将已有项目改为maven结构,就只介绍后者的作法。
对于已有项目,直接对项目右键-->Configure-->Convert to maven project
这里由于博主是web项目因此packaging选择打成war包。
完成后你的项目结构会发生一点变化,而后我们进入pom.xml
在pom.xml中找到以下字段(若是没有就添加上),明眼人能够直接看出其实<sourceDirectory>...</sourceDirectory>其实就是你的源码路径,<directory>...</directory>就是你的资源路径,只要让maven知道你的源码在哪,资源库在哪,它就会自动去运行这些文件。(下文有完整的pom.xml文件)
而后检查一下maven的相关设置是否已经配置好(通常m2e插件会帮我们弄)
右键-->properties-->java build path-->Libraries查找一下有没有M2_REPO,
若是没有,点击Add Library自行添加。
而后查看Source
若是源码文件夹没有设置Output folder,点击Edit,输入
完成后回到pom.xml,开始编辑,下面是个人pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mcrm_web</groupId> <artifactId>mcrm_web</artifactId> <version>1.0.2</version> <packaging>war</packaging>
<!-- 这里是为了让sonar在编译时按UTF-8来编译 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies>
<!-- 这部分是个人项目依赖的jar包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.1.1.RELEASE</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20131018</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>tomcat</groupId> <artifactId>servlet-api</artifactId> <version>5.5.23</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-servlet_3.0_spec</artifactId> <version>1.0</version> <scope>provided</scope> </dependency>
<!-- 这个依赖我没有在中央库里找到,因此把他变成本地的了--> <!-- 本地依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.1.1.RELEASE</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.6</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.directory.studio</groupId> <artifactId>org.apache.commons.lang</artifactId> <version>2.6</version> <scope>provided</scope> </dependency> <!-- 本地依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.1.1.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> </dependencies> <build>
<!-- 告诉maven个人源文件位置--> <sourceDirectory>src</sourceDirectory>
<!-- 告诉maven个人资源库在哪-->
<resources> <resource> <directory>src</directory>
<!-- 告诉maven在编译时不要将后缀是.java的文件放进war包里 -->
<excludes> <exclude>**/*.java</exclude> </excludes> </resource> </resources> <plugins> <plugin>
<!-- 编译插件 --> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration>
<source>1.6</source> <target>1.6</target> <encoding>utf8</encoding> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <warSourceDirectory>web</warSourceDirectory> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
在POM中,你须要注明全部非JDK自带的依赖,这些依赖的版本号和名称都是特定的,在maven仓库中你能找到大部分所须要的依赖,例如我们须要找spring-context这个jar包,进入仓库中,输入spring-context,找到本身所须要的那个,选择合适版本,而后直接将对应的groupid和artifactld以及version写入pom中,例如:
但有些时候我们依赖的jar包在仓库中查询不到,这时我们就须要手动添加jar包,例如:
这个jar包我没有在maven仓库中找到,就直接把jar包扔进了相应的路径中
~\repo\org\springframework\spring-jdbc\3.1.1.RELEASE(这些文件夹原来是没有的,都是我本身建的)
将这些东西作完后,就能够run一下看看了,有两种方式,第一种是在cmd中,进入项目所在的目录中(保证这个目录下有pom.xml),运行mvn clean install。第二种方式是在eclipse中右键-->Run As--> Maven install 。
可能出现的错误:
若是编译出错,报出缺乏某些包的话,看好是哪些包,直接去maven仓库中找,找到后写入pom.xml中。
若是出现乱码的话,在pom.xml中加上让maven以UTF-8来编译。
若是编译成功了,那我们能够在项目目录\target下找到打包好的war包,把它直接扔到tomcat里,试试能不能运行吧。(这里我遇到一个问题,新打的war包不会把最新的.class文件放进去,而是放最先编译完成的,个人解决方法是将\target\classes里的东西扔到项目目录\web\WEB-INF\classes里再打包一次,应该是某处设置有误,但如今我还未找到)
至此,CI的maven部分就基本介绍完了,下篇将介绍hudson和sonar部分。
参考文章:
[2]Myeclipse 8.5 配置SVN - ewyb - 博客园
[3]Maven 详解 - 小菜鸟的博客 - 博客频道 - CSDN
[4]如何在maven中添加本地jar包 - maven - ITeye群组