前些日子研究了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羣組