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

  前些日子研究了CI的具体流程,在过程遇到许多意料之外的困难,现在终于爬出坑,特此将经验分享给大家,希望大家少走写弯路

  需要:

  JDK1.5及以上版本

  tomcat

  Hudson

  svn

  Maven

  Nexus(做Maven远程仓库用,非必须)

  sonar

  eclipse

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群组

posted @ 2014-10-16 11:56  yuexizhuo  阅读(724)  评论(0编辑  收藏  举报