返回
编程
分类

开发本地环境、开发环境、测试环境、IDC环境,A和B都习惯使用SVN作为代码管理工具

日期: 2020-01-02 07:58 浏览次数 : 186

windows下JAVA敏捷开发环境搭建步骤教程

   编程开发环境搭建还是挺重要的,第一步是先要搭建环境,有了环境才能开展工作。本文我们来看看windows下JAVA敏捷开发环境搭建步骤。

  整个软件项目分为四个环境 开发本地环境、开发环境、测试环境、IDC环境。和传统C++开发不一样的模式是多了第一个开发本地环境。这是为什么呢,因为目前大部分开发人员还是比较熟悉windows下开发。对于mac和linux下直接使用软件并且开发的中国开发者还是少之又少,这套架构就这个现状做出来的。如下是环境搭建架构图:

必威官网亚洲体育 1

  从环境来说:

  一、开发本地环境、开发集成服务器搭建。 前端开发者、后台开发者。

  前端开发用的最多的是photoshop和dreamweaver。在做psd之前大部分是不会协同开发的,只有整个文件传递过来过去。html切割的时候可能就会多个人协同开发了。这个时候需要一个集中ftp服务器、svn服务器。svn服务器用于保存版本代码库,用于保存历史修改的版本和开发人员协同。ftp服务器适用于及时修改时保存上传到预览服务器进行预览。看到这里有人也许会问,我直接合并svn和ftp不行吗?其实有这样的问题,如果直接提交svn,后台开发人员就会从svn看到。本来是前端的集成协同开发预览,结果影响到后台容易引起版本混乱。

  后台开发怎么搭建环境?用eclipse在本地环境搭建开发环境,通过tomcat插件或者jetty启动调试class、jsp。之前看过很多公司都通过打成war包发布到集成环境再调试。集成环境大家都去集成容易引起版本混乱。即使不发布到集成环境,在本地就算修改个小的class文件也要重启 war包有点浪费时间。最好就是利用tomcat的热部署,修改小功能直接生效。现在我们就是这样做的,用maven管理jar包依赖,ant本地打包、拷贝包,用eclipse的tomcat插件热部署快速开发。等到所有功能开发好了。把分支版本发布到开发环境进行集成测试。

  开发环境涉及的软件有:nexus 、maven、tomcat服务器、mysql、ftp、jenkins、svn、jira、fisheye、eclipse、dreamweaver、photoshop、nginx。

  软件的作用:

  nexus作为集中仓库管理,因为每个工程如果都有一堆jar包,很难管理。加上svn上传、分支、合并耗费网络带宽、空间。如果有个地方把这些浪费空间的jar集中管理起来,所有工程合用岂不是很好。

  maven是软件生命周期、依赖管理,有了集中管理jar包,就需要有个东西把jar包仓库和工程连接起来。

  tomcat服务器是本地开发使用和集中测试服务器。

  mysql就没必要每个开发机器都装一个了,放在一个开发环境就可以。

  ftp作为前端开发上传文件使用。

  jenkins是持续集成,开发和前端都把代码弄好,怎么融合集成在一起测试呢,总需要有个人来把所有的文件合并在一起吧?这个软件就起到这个角色,把所有文件集成、编译、打包、发布到tomcat服务器。如下图:

必威官网亚洲体育 2

  svn代码版本管理,大家都知道协同作用。

  jira用于需求、bug等管理。

  fisheye用于代码统计、审核等。

  eclipse、dreamweaver、photoshop不用说啦。

  nginx主要用于做虚拟主机和静态资源管理。因为我们可能同时开发多个网站,nginx可以根据不同的域名转发到不同的web服务器。

  二、测试服务器。开发、测试。

  开发集成测试环境通过后,这个就可以转测试了。通过持续集成,测试部署好环境就开始测试。测试环境同样依赖于集中仓库、maven、持续集成等软件。也就是集成测试环境、开发集成环境、开发本地环境都是用的一套jar包,是不是很cool。如果测试不通过,就要转回开发,开发好再转测试。怎么保证开发的质量和测试的质量,还有大家的协作性,这个过程涉及到软件工程和绩效考核,后面再说。测试通过一些测试,测试通过后就可以发布到外网了。这个时候需要提供发布列表、操作步骤、数据库操作脚本给到运维审核,审核通过后才能发布。

  怎么发布到外网IDC呢?运维可以根据发布列表去操作,开发和前端一起等着熬夜啊熬夜。没有效率!这里提出了一个增量发布版本的方式,通过发布列表,我们的发布程序会自动检测到发布的文件和发布的机器,发布到对应的服务器。如果发布失败了还可以回滚文件,基本上是一键操作。未来还会把服务器重启、日志输出等集成起来。

  三、IDC服务器。

  外网的真实服务器,后台和前台。大家能够访问到的网站服务器。业务人员在版本发布后查看。整个流程就做好了。大家在每一次版本开发完了,可以很好的协同、开发、测试、发布。

编程开发环境搭建还是挺重要的,第一步是先要搭建环境,有了环境才能开展工作。本文我们来看看...

前言

  jar间接依赖:  被依赖的jar的范围要设置成compile,因发布会包含test范围依赖的jar包。

    但凡一个略有规模的项目都需要一个持续集成环境的支撑,为什么需要持续集成环境,我们来看一个例子。假如一个项目,由A、B两位程序员来协作开发,A负责前端模块,B负责后端模块,前端依赖后端。A和B都习惯使用SVN作为代码管理工具,他们分别开始工作,一个功能完成后会提交到SVN,以便对方能够使用。一天B告诉A,我的某个功能完成了,提交到SVN,你更新下来试一下。A便从SVN更新下来代码,结果一试,我檫报错,于是告诉B你的代码有问题,B检查了一下确实有问题,然后B经过1个小时修改后,重新上传到SVN,A更新下来可以使用了。又过了几个小时,A发现B的代码仍然有问题,B检查了半天,没找到问题所在,后来开发组长检查他们的代码发现是两个人使用不同版本的jar包导致的,这个问题确认难以发现,A把jar包的版本弄得和B一样,A和B又开始继续工作。终于有一天项目完成了,需要发布程序,这时A从自己的开发环境上编译一个版本,把他上传到服务器上,程序运行的前几天比较稳定,后来A有点急事请假了,但服务器上的程序这时好像出现了问题,这时B只能使用自己的电脑调试、解决问题并试着发一个版本,但因为他平时做后端,对版本发布不是很熟悉,又搞了半天终于弄好了。项目上线了,稳定运行了半年,后来A、B先后离职了,新来的C负责维护这个项目,尽管A、B在离职前做了一些工作交接,但当C真正接手的时候才发现头大,我檫居然注释都没写,有没有这么坑的,由于C开始硬着头皮看代码,发现代码中各种飘逸写法,各种为了临时需求而打的补丁,C几乎抓狂。

  建立项目之间的联系:先在pom中设定依赖关系,然后可以引用了

    以上的例子有点夸大,但或多或少都可能遇到过,我们需要一种规范来约束这个开发过程,使开发过程严格有序的进行。

   .conf:

从问题出发

 C:apache-maven-3.2.1confsettins.xml

就以上面这个例子,我们看其中暴露出了哪些问题:

  maven 配置文件 :

1、团队彼此协作不流畅,出现彼此阻塞的情况;

    配置的是本地仓库地址 以及服务器的验证

2、使用的类库版本不统一,造成难以估计的风险;

流程:1.将apace-maven-xxx设置到path环境变量

3、代码未经严格测试就上传,造成不断的返工;

 2.设定C:apache-maven-3.2.1confsettins.xml的<localRepository>中本地仓库,如设定为E:mvn_repo

4、版本发布规范欠缺,版本质量不能保证;

 3.在myeclipse中启用maven4Myeclipse,并在Installatons中添加上面的apache-maven-3.2.1。

5、代码质量低,其他人难以接手。

   

    maven 项目管理与构建工具   activiti   

一、maven介绍

  1.使用需求

     - 企业岗位需求

     - 软件开发中遇到的问题

       1. jar包的依赖与管理  

         项目中有很多jar包: 

  问题:不能确定jar包的完全正确性、不同技术框架版本的管理、jar包的依赖

       2. 自动构建项目

          - 软件开发: 可行性分析、需求分析、软件设计、软件开发、发布、运维

 - 软件构建: 软件已经开发完毕,需要构建成一个产品进行发布

   构建步骤:

   清除--> 编译-->测试-->报告-->打包(jarwar)-->安装-->部署到远程

 maven可以通过一个命令实现自动构建软件项目

  2.引入maven

     1. maven介绍  

       - 它是apache旗下的一款开源工具  

       - pom(项目对象模型)

       - 软件构建的生命周期

         清除--> 编译-->测试-->报告-->打包(jarwar)-->安装-->部署到远程

       - 介绍:  Maven是一个采用纯Java编写的开源项目管理工具,

      Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,

      所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 

      通过该文件Maven可以管理项目的整个生命周期,

      包括清除、编译,测试,报告、打包、部署等等。

       

     2. maven 解决的问题

        - jar包的声明式依赖管理与管理

  • 自动构建、发布项目

     软件构建的生命周期:

        清除--> 编译-->测试-->报告-->打包(jarwar)-->安装-->部署到远程

      maven可以通过一个命令实现自动构建软件项目

     3. maven、ant、svn的区别

       - maven与ant之间的区别

          都是软件构建工具、软件管理工具,maven比ant更加强大,已经取代了ant

  maven优点:

   - jar包声明式依赖

   - jar包仓库

       - maven 与svn的区别

         1.maven 软件构建工具,是软件源码已经完毕,需要构建,需要部署与发布

  1. svn 是版本控制工具,是协同开发工具

        svn 仓库 :

          1. 项目源码保存

          2. 历史版本的备份

          3. 每一次版本的修改情况

     需求: maven+svn

        

二、体验Maven

  1. 下载及安装Maven

     - 在apache 官网去下载maven 

        www.apache.org 下载

     - maven 软件目录介绍   

        1.lib :共享库。maven软件依赖的lib jar包

2.boot :plexus-classworlds-2.5.1.jar 

  该文件是jar包下载的引擎 ,通过该工具来下载jar包

   - 第三方项目依赖的jar包

   - maven本身的软件构建的生命周期插件的jar包,默认是没有集成这些插件

     清除插件 --编译插件 -- 打包插件

3.conf:

 C:apache-maven-3.2.1confsettins.xml

  maven 配置文件 :

    配置的是本地仓库地址 以及服务器的验证

4.bin 

  maven 可执行的命令

  mvn  命令

     

     - 测试maven是否安装成功

       命令行:mvn -version

         配置:环境变量path="C:apache-maven-3.2.1bin"

       java_home 

       

  2.创建满足Maven规约的项目

    - 约定优于配置  

      1. 生活中的约定 :红绿灯 、车方向盘

      2. 开发中的约定 : javabean :setXXX、getXXX

    - 按maven规约的目录结构,创建java项目

      Hello项目

        - src

 ---main

    ---java

      ---包和类

        包: cn.it

类:Demo

    ---resources

       leaveBill.zip

 ---test

    ---java

    ---resources

  • target  : 该文件夹可有可无,是编译src后的输出文件的目录,没有则自动创建

  • pom.xml : (project ojbect  model):项目对象模型 ,它是maven核心配置文件

       

    - 生命周期命令插件构建项目

     1. 配置本地仓库的路径

     2.通过maven生命周期命令插件来构建项目  

        maven 默认是没有生命周期命令插件

 进入到项目目录:

生命周期命令:

 - mvn clean :清除

 - mvn compile :编译

 - mvn  package :打包

 - mvn clean  install : 安装到本地仓库

必威官网亚洲体育 ,  -mvn deploy :部署 ,部署到私服 (局域网或者是外网)

  3.思考:

    - 从什么地方下载maven命令插件或者第三方依赖jar包,并且存放在哪里

      1. 从哪里下载

        C:apache-maven-3.2.1libmaven-model-builder-3.2.1.jar

  pom.xml文件配置

 

 <!--第三方jar包下载的地址-->

 <repositories>

    <repository>

      <id>central</id>

      <name>Central Repository</name>

      <url>;

      <layout>default</layout>

      <snapshots>

        <enabled>false</enabled>

      </snapshots>

    </repository>

  </repositories>

 <!--maven的生命周期插件的下载地址-->

  <pluginRepositories>

    <pluginRepository>

      <id>central</id>

      <name>Central Repository</name>

      <url>;

      <layout>default</layout>

      <snapshots>

        <enabled>false</enabled>

      </snapshots>

      <releases>

        <updatePolicy>never</updatePolicy>

      </releases>

    </pluginRepository>

  </pluginRepositories>

   2. jar包存放在哪里:

     C:apache-maven-3.2.1confsettins.xml 配置输出的地址 仓库

      | Default: ${user.home}/.m2/repository

  <localRepository>/path/to/local/repo</localRepository>

  -->

  <!--配置本地maven仓库的路径  默认 是${user.home}/.m2/repository -->

  <localRepository>C:/mvn_repo/repository</localRepository>

三、maven管理jar包依赖

  1. maven术语

     - maven软件构建的生命周期

         清除--> 编译-->测试-->报告-->打包(jarwar)-->安装-->部署

     - maven生命周期命令插件

        命令:mvn clean

clean--compile--test--package--install-deploy

     - maven坐标

        maven通过坐标的概念来唯一标识jar包或者war包 

  1. 坐标的组成: groupId + artifactId+ version

     - groupId:组id ,机构名,公司名:好比公司的id,或者是公司包名 

       alibaba ——-》高德--》5.01版本

     - artifactId:构建物id ,产品名或者产品的id

     - version :版本号 

  2. jar包组成:

      artifactId-version.jar

   

      

     - maven仓库

       1. 本地仓库  localRepository

          通过settings.xml 设置

       2. 公司私服仓库 :存放局域网的服务器中

          nexus 软件来发布maven私服

       3. 中心仓库 ,面向全球的  

          地址 : 或者

      

  2. pom.xml介绍 :project object model 项目对象模型 ,它是maven核心配置文件

    

    

  3. jar包依赖管理

     

四、练习 Maven

   1. 把maven 环境搭建好,设置环境变量

   2. 测试maven是否ok 

       mvn -version

   3. 创建一个安照Maven约定的java项目Hello

   4. 通过mvn测试Hello项目,并且把Hello项目安装到本地仓库去

     配置C:apache-maven-3.2.1confsettings.xml 

     <!-- localRepository

   | The path to the local repository maven will use to store artifacts.

   |

   | Default: ${user.home}/.m2/repository

    -->

<!--设置个人仓库的地址-->

    <localRepository>C:/mvn_repo/repository</localRepository>

    5. 拷贝提供的下载插件和jar包的仓库内容repository.rar到本地仓库

    6. 用maven的生命周期命令插件 测试 项目

       1. test   clean   compile   package  install

    7. 创建HelloFriend项目,并且要依赖Junit和Hello jar包

    8. 测试HelloFriend项目,并且把项目发布到本地仓库中

       - 当Hello项目在本地仓库删除时,再编译HelloFriend项目是否有异常

      

五、MyEclipse 与 Maven整合

   1.配置MyEclipse

     - 配置Maven插件

       1. myeclispe已经集成了maven插件 

       2. 设置myeclipse的maven插件的版本

          - myeclise的 maven集成设置 

          - installations  :设置maven版本 ,自定义设置

    指定自己下载的maven版本 c:apache-maven-3.2.1

          - user settings :用来配置当前用户的设置信息

    比如 :本地仓库地址

 

   2. 创建满足maven规约的java项目

      - archetype :骨架、框架 、模型

        1. maven-archetype-quickstart : 快速构建项目的骨架  ,简单的满足maven规范的java项目

    

   3. 创建满足maven规约的web项目

      骨架:maven-archetype-webapp

 

六、搭建Maven的私有服务器

 网线 :外网 :ip地址 (动态的  )

 

   1.nexus介绍  .是开源的框架,属于sonatype 机构的开源框架,用该框架架设maven 私有服务器

     

     

     

     

   2.nexus私服环境搭建

      - 从 www.sonatype.org/nexus/  下载

      - 把nexus.war 包放到tomcat的webapp下面

      - 浏览且登录

        用户名(admin)和密码 (admin123)  

    

   3.nexus 仓库的分类   

      - hosted :宿主仓库 ,该仓库属于该公司私有的

        1. 3rd part : 第三方的jar包,但是该jar包没有在中心仓库保存,驱动.jar

  1. snapshot :测试版本、镜像版本  easyNet.war

  2. release  : 发行版本

      - proxy  : 代理仓库  :代理中心仓库的jar包

        

      - public :仓库组 :虚拟的概念

        可以包含其他的仓库

        

     

     

   4.通过私服上传下载jar包

     - 上传jar包

       - 直接上传jar包

         通过网站直接上传

       - 把myEclispe项目上传到私服

        

     - 从私服中依赖jar包(下载jar包)

       

       

  重点:

    1. maven 特点

       - jar依赖

       - 自动构建项目

    2. maven目录结构

    3. maven专业术语

       - 坐标

       - pom.xml

    4. 在myeclispe中创建maven java项目   maven web项目

    5. 私服

      -nexus

      - 从私服中下载jar包 、 上传jar包

   <!-- 加载的是 第三方项目使用的jar包 -->

   <repositories>

    <repository>

      <snapshots>

        <enabled>true</enabled>

      </snapshots>

      <id>public</id>

      <name>public</name>

      <url>;

    </repository>

  </repositories>

   <!-- 加载的是maven生命周期插件的jar包 -->

  <pluginRepositories>

    <pluginRepository>

      <releases>

        <updatePolicy>never</updatePolicy>

      </releases>

      <snapshots>

        <enabled>true</enabled>

      </snapshots>

      <id>public</id>

      <name>public</name>

      <url>;

    </pluginRepository>

  </pluginRepositories>

  <!-- 分销管理 ,把jar包发布到私服中 -->

  <!--配置服务器

<server>

      <id>releases</id>

      <username>admin</username>

      <password>admin123</password>

    </server>

<server>

      <id>snapshots</id>

      <username>admin</username>

      <password>admin123</password>

    </server>

    

    -->

  <distributionManagement>

  <!-- 发布到 快照版本的仓库,即 测试版本仓库 -->

  <snapshotRepository>

  <id>snapshots</id>

  <url>;

  </snapshotRepository>

  <!-- 发布到 发行版本的仓库中,也可以发布到3rd party 仓库 -->

  <repository>

    <id>releases</id>

  <url>;

  </repository>

  

  </distributionManagement>

       

       

    团队开发时,我们常常约定好彼此之间的接口规范,然后开始各自开发,开发完成后,按照接口规范对接起来,这是一个理想的流程,但现实往往不那么顺利,问题常常在于,接口规范可能根据需求变化而经常变更,而且在实际对接时经常发现诸多问题。我们无法通过工具来解决这些问题,只能要求开发人员在制定接口规范时,为可能变更的需求多一些扩展,在开发时多考虑诸多素质,尽量将减少对接过程中的问题。下面将讲述如何使用Maven和Nexus保证开发人员引用统一的类库版本,以及如何将自己开发的模块上传至Nexus服务器,以提供给其他模块引用。

关于Maven和Nexus的搭建在Maven实战(Maven+Nexus建立私服【Linux系统】)中已经介绍过,在此介绍下主要步骤:

1、下载maven(读:妹吻)和nexus(读:耐克色儿丝):

2、将下载的nexus放置到linux服务器解压并启动:

 

cd /data/program/nexus-2.3.1-01/bin/jswll

必威官网亚洲体育 3

选择自己的系统并进入:

必威官网亚洲体育 4

启动nexus

./nexus start

必威官网亚洲体育 5

nexus启动成功,访问:

必威官网亚洲体育 6

3、将下载的maven解压放置在开发机上(windows),并配置conf目录下的setting.xml文件:

(1)在<settings><profiles></profiles></settings>节点之间添加配置:

<profile> <id>dev</id> <repositories> <repository> <id>local-nexus</id> <url>; <releases><enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile>

接着在<settings></settings>节点之间添加配置:

<activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles>

以上配置好了连接Nexus私服。

(2)安装eclipse的m2eclipse插件,并配置maven。

m2eclipse的安装地址:(安装过程略)

安装完成后配置maven:

必威官网亚洲体育 7

必威官网亚洲体育 8

配置eclipse的maven为本地下载的maven地址。主要为了方便配置和版本管理。

至此,nexus和maven就搭建配置完成了,下面我们要利用这个环境解决两个问题:

1、不同的模块项目都使用统一的类库版本;如spring都使用3.1.2.RELEASE,log4j都使用1.2.17。这样避免因为jar包版本的不同,引发的诸多问题。

2、模块开发完毕后,将编译的库文件发布到nexus私服上,以便其他模块引用。

这里说一下maven的一个特性,继承。简单来说继承就是先建立一个父项目,其他项目如果继承这个父项目,就可以继承这个项目定义的库文件及版本。利用这个特性,我们可以让多个模块都继承一个父项目,而在父项目中定义好类库的版本,这样所有模块都使用统一的类库文件。例如:

建立名为maven-parent的父项目,pom配置为:

<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>com.cnblogs.leefreeman</groupId>

    <artifactId>maven-parent</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <packaging>pom</packaging>

    <properties>

        <!-- junit -->

        <junit.version>4.10</junit.version>

        <!-- servlet -->

        <servlet-api.version>2.5 </servlet-api.version>

        <!-- log4j -->

        <log4j.version>1.2.17 </log4j.version>

        <!-- commons.codec -->

        <commons.codec.version>1.7</commons.codec.version>

        <!-- maven-support -->

        <maven-support.version>0.0.1-SNAPSHOT</maven-support.version>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    </properties>

    <dependencyManagement>

        <dependencies>

            <!-- junit -->

            <dependency>

                <groupId>junit</groupId>

                <artifactId>junit</artifactId>

                <version>${junit.version}</version>

                <scope>test</scope>

            </dependency>

            <!-- log4j -->

            <dependency>

                <groupId>log4j</groupId>

                <artifactId>log4j</artifactId>

                <version>${log4j.version}</version>

            </dependency>

            <!-- commons包 -->

            <dependency>

                <groupId>commons-codec</groupId>

                <artifactId>commons-codec</artifactId>

                <version>${commons.codec.version}</version>

            </dependency>

            <!-- servlet -->

            <dependency>

                <groupId>javax.servlet</groupId>

                <artifactId>servlet-api</artifactId>

                <version>${servlet-api.version}</version>

                <scope>provided</scope>

            </dependency>

        </dependencies>

    </dependencyManagement>

</project>

这个pom定义了一些类库以及它的版本。

然后再建立模块项目:maven-sample(web项目)、maven-support(支撑模块,包括一些工具类以及业务封装,提供给maven-sample引用)。

maven-sample的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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>

        <groupId>com.cnblogs.leefreeman</groupId>

        <artifactId>maven-parent</artifactId>

        <version>0.0.1-SNAPSHOT</version>

    </parent>

    <artifactId>maven-sample</artifactId>

    <packaging>war</packaging>

    <dependencies>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

        </dependency>

        <dependency>

            <groupId>log4j</groupId>

            <artifactId>log4j</artifactId>

        </dependency>

        <dependency>

            <groupId>commons-codec</groupId>

            <artifactId>commons-codec</artifactId>

        </dependency>

        <dependency>

            <groupId>javax.servlet</groupId>

            <artifactId>servlet-api</artifactId>

        </dependency>

    </dependencies>

    <build>

        <finalName>maven-sample</finalName>

    </build>

</project>

maven-support的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>

    <parent>

        <groupId>com.cnblogs.leefreeman</groupId>

        <artifactId>maven-parent</artifactId>

        <version>0.0.1-SNAPSHOT</version>

    </parent>

    <artifactId>maven-support</artifactId>

    <packaging>jar</packaging>

    <dependencies>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

        </dependency>

        <dependency>

            <groupId>log4j</groupId>

            <artifactId>log4j</artifactId>

        </dependency>

        <dependency>

            <groupId>commons-codec</groupId>

            <artifactId>commons-codec</artifactId>

        </dependency>

    </dependencies>

</project>

通过以上配置,maven-sample和maven-support引用的jar包,都会使用相同的版本:

必威官网亚洲体育 9

接下来我们解决协作开发的问题,maven-support开发完毕之后,将之发布到nexus服务器,以便maven-sample可以引用。我们需要3步:

1、本地maven的conf目录下的setting.xml,在<servers></servers>节点之间添加:

<server>

<id>releases</id>

<username>admin</username>

<password>admin123</password>

</server>

<server>

<id>snapshots</id>

<username>admin</username>

<password>admin123</password>

</server>

2、在maven-support项目的pom.xml中,<project></project>节点之间添加:

<!-- 构件部署仓库 -->

    <distributionManagement>

        <repository>

            <id>releases</id>

            <name>发布版本仓库</name>

            <url>http://192.168.0.109:8081/nexus/content/repositories/releases/</url>

        </repository>

        <snapshotRepository>

            <id>snapshots</id>

            <name>快照版本仓库</name>

            <url>http://192.168.0.109:8081/nexus/content/repositories/snapshots/</url>

        </snapshotRepository>

    </distributionManagement>

3、对maven-support项目进行编译,并执行发布命令:

必威官网亚洲体育 10

必威官网亚洲体育 11

可以看到maven-support已经成功发布到nexus私服中:

必威官网亚洲体育 12

必威官网亚洲体育 13

这样maven-sample就可以引用maven-support模块,而开发maven-support的人则可以继续开发,持续发布新版本。

必威官网亚洲体育 14

小结

    本文主要介绍maven和nexus的环境搭建,以及怎么使用maven和nexus统一管理库文件和版本,怎么讲自己的模块上传至nexus私服,供其他模块引用。这样我们基本解决了两个问题:

1、团队彼此协作不流畅,出现彼此阻塞的情况;

2、使用的类库版本不统一,造成难以估计的风险;

下一篇将使用jenkins、svn、tomcat以及sonar解决自动化测试、自动化版本发布、代码质量检查等问题。

前言

    上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库文件和版本,以及怎么将自己的模块上传至nexus私服,供其他模块引用。下面将主要介绍如何利用Jenkins、SVN、Tomcat以及Sonar来完成项目的自动化编译、测试和发布,以及检查项目的代码质量。

利器Jenkins

    Jenkins源于另外一个持续集成工具Hudson,Hudson在oracle收购sun之前,是开源社区在开发和维护,oracle收购sun之后声明拥有hudson的商标使用权,后来开发hudson的开源力量只能重新起个名字“Jenkins”来继续开发,原Hudson则由oracle持续维护,但更新速度比较慢。

jenkins地址:

hudson地址:

可以看到hudson官网右下角oracle的版权logo。我们这里就使用Jenkins来搭建持续集成环境。

首先从官方上下载jenkins, 可以选择不同的版本。下载完成后放置在服务器某个目录下,cd到该目录下,执行:

java -jar jenkins.war

jenkins内置一个jetty容器,默认使用8080端口,如果你的8080被占用了,请执行:

java -jar jenkins.war --httpPort=8081

 

当然你也可以直接把war包放到tomcat目录下启动,这样jenkins就启动起来了。

必威官网亚洲体育 15

来到这个界面我们先做一个事情:系统配置,主要是配置maven和发布插件。

1、进入“系统管理”——>“系统设置”:

新增maven,将linux上安装好的maven配置上去。

必威官网亚洲体育 16

其他保持默认配置,保存!

2、进入“系统管理”——>“管理插件”——>“高级”上传插件

必威官网亚洲体育 17

上传完成之后,jenkins就具备了发布web应用到tomcat各类容器的能力。

注:deploy.hpi插件是我事先从网上下载好了,你也可以使用jenkins自带的插件安装功能完成插件安装,但那个比较慢。

3、配置linux服务器上的maven,跟上篇类似你也需要配置linux服务器上的maven,使之连接到nexus私服,以及支持发布模块到nexus上。

在<settings><servers></servers></settings>节点之间添加:

   1:    <server>  

   2:      <id>snapshots</id>  

   3:      <username>deployment</username>  

   4:      <password>123456</password>  

   5:    </server>  

   6:      <server>  

   7:      <id>releases</id>  

   8:      <username>deployment</username>  

   9:      <password>123456</password>  

  10:    </server>

在<settings></settings>节点之间添加:

   1:  <profiles>

   2:          <profile>

   3:              <id>dev</id>

   4:              <repositories>

   5:                  <repository>

   6:                      <id>local-nexus</id>

   7:                      <url>http://192.168.0.109:8081/nexus/content/groups/public/</url>

   8:                      <releases>

   9:                          <enabled>true</enabled>

  10:                      </releases>

  11:                      <snapshots>

  12:                          <enabled>true</enabled>

  13:                      </snapshots>

  14:                  </repository>

  15:              </repositories>

  16:          </profile>

  17:      </profiles>

  18:   

  19:      <!-- activeProfiles | List of profiles that are active for all builds. | -->

  20:      <activeProfiles>

  21:          <activeProfile>dev</activeProfile>

  22:      </activeProfiles>

 

完成这些配置,我们就可以在jenkins上新建项目了。

我们事先在eclipse中开发的三个项目:maven-parent(父项目,用于统一类库版本)、maven-support(后端模块,支撑web项目)、maven-sample(web项目,依赖maven-support),依次来添加:

必威官网亚洲体育 18

下一步进入后,主要配置两个地址,svn和maven命令。

必威官网亚洲体育 19

根据提示进行SVN用户名、密码认证即可。

必威官网亚洲体育 20

对于maven-parent项目,我们执行install命令即可。保存!

接着创建maven-support项目,由于该项目是后端模块,需要发布到nexus服务器上,所以稍有不同:

必威官网亚洲体育 21

这里需要执行deploy命令,将该项目发布到nexus上。另外你最好配置该项目构建在maven-paremt执行之后开始:

必威官网亚洲体育 22

最好保存!

最好创建maven-sample项目,这是个web项目,配置又稍有不同:

必威官网亚洲体育 23

执行package命令将项目打包成war包。下面做最重要的事情:将打包后的war包自动发布到tomcat下:

必威官网亚洲体育 24

注意几点:

1、WAR/EAR files,一定要填写相对地址;

2、Manager username、Manager password是你安装的tomcat用户名、密码,如果没有请通过tomcat的配置文件tomcat-users.xml设置。

3、tomcat url为你安装的tomcat访问地址。

最后还是设置下构建顺序,让它在maven-support执行完成之后构建:

必威官网亚洲体育 25

保存!

jenkins首页上就出现了三个我们创建好的项目,我们只需要构建maven-parent就可以了,因为我们设置了构建顺序:

必威官网亚洲体育 26

查看构建信息,可以看到构建的进程,项目先从svn更新下来,然后进行编译,运行测试用例,打包,发布的过程。整个过程都由jenkins完成,

必威官网亚洲体育 27

必威官网亚洲体育 28

至此jenkins就实现了自动化编译、测试(自己写测试用例)、打包发布、部署。

必威官网亚洲体育 29

可以看到tomcat上已经多了maven-sample应用。

必威官网亚洲体育 30

部署Sonar

从官网上下载sonar安装包,解压到系统目下,进入到bin目录下,选择你的系统版本,进入后执行:

./sonar.sh start

 

sonar就启动起来了,默认的端口是9000,你也可以到conf/sonar.properties配置文件中修改:

sonar.web.port:                           8066

 

必威官网亚洲体育 31

在Jenkins安装sonar插件

和安装deploy插件方法类似,我们在系统管理——插件管理中,上传sonar插件。安装完成之后,请重启jenkins。

必威官网亚洲体育 32

配置jenkins的sonar插件:

进入系统配置

必威官网亚洲体育 33

根据你的情况配置sonar,我这里仅仅修改过sonar的应用端口,所以只需要配置这个,其他保留默认值。

进入特定项目配置sonar:

必威官网亚洲体育 34

必威官网亚洲体育 35

选择下maven版本,其他保留默认值。保存!

然后开始构建项目,构建完成后,可以看到该项目的代码检查结果已经被导入到sonar平台上,通过sonar系统就可以方便查看该项目的代码质量情况:

sonar可以检查代码的复杂度、代码重复、单元测试覆盖率、是否有注释、潜在bug等代码问题,对于sonar的项目介绍,可以进一步去研究摸索,在这里仅介绍jenkins和sonar整合的方法,可以再实际工作时进一步研究。

必威官网亚洲体育 36

必威官网亚洲体育 37

小结

    本文主要介绍如何搭建jenkins以及怎么利用maven、deploy插件打包、发布你的项目,最后使用jenkins和sonar配合进行项目的代码质量检查。完成整个过程我们可以发现,以往的测试、打包、发布、代码检查的工作都可以由人工转化工具来完成,让程序员的宝贵时间集中在开发上。回过头看Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)开头的故事,我们可能会有不同的想法。