Hudson+maven+svn+sonar搭建CI环境(web篇)--上

  前些日子研究了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>,改为你本身的仓库路径。


这里改的是私有仓库,有关maven仓库的内容,请戳这里

若是想利用Nexus设置一个公司级的远程仓库,让你们从公司级的远程仓库中下载依赖,免去一个依赖每一个人都要下载一遍的烦恼,请戳这里

 

完成以后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部分。

 

 

参考文章:

[1]maven环境快速搭建 - 虫师 - 博客园

[2]Myeclipse 8.5 配置SVN - ewyb - 博客园

[3]Maven 详解 - 小菜鸟的博客 - 博客频道 - CSDN

[4]如何在maven中添加本地jar包 - maven - ITeye群组

[5]Nexus入门指南(图文)-juvenshun-ITeye群组

[6]Maven最佳实践:Maven仓库-juvenshun-ITeye群组

相关文章
相关标签/搜索