构建java环境的自动化构建和部署系列二

 所有系列文章:

  <<构建java环境的自动化构建和部署系列一>>

  <<构建java环境的自动化构建和部署系列二>>

 <<构建java环境的自动化构建和部署系列三>>

 <<构建java环境的自动化构建和部署系列四>>

  

 前段为了方便公司管理项目的版本控制,和方便开发人员快速的部署项目(公司么有运维人员),搭建了搭建敏捷高效的持续集成管理平台,并且规范了安装部署的规范统一通过Shell来实现一键安装环境.(不过也要淘汰了,BOSS想通过Docker 来实现系统环境的部署)

持续集成管理平台的组成

    持续集成管理平台不只是CI服务器,是一系列软件开发管理工具的组合

1、源码版本管理:Subversion、 Git

2、项目构建工具:Maven、 Ant

3、代码质量管理:Sonar(Checkstyle、 PMD、 FindBugs……)

4、持续集成引擎: Jenkins、

5、应用持续部署:操作系统、 JDK、 Tomcat、 JBoss…

实施持续集成过程中要用到的其他各种工具、各种插件、和Shell脚本…

本系列的大概章目: 

   (1) Subversion源码版本控制系统的安装

    Subversion + Apache + jsvnadmin

    公司是使用Windows来搭建SVN的,这比Linux方便多了,偷懒了

     http://www.dczou.com/viemall/522.html

  (2) Maven私有库和本地库的安装与配置  Nexus + Maven

  (3) Sonar代码质量管控平台的安装与使用配置,

      这个比较坑,在安装的时候插件都不兼容;需要一个个找来组装

   (4) Hudson持续集成引擎的安装与配置

   (5) 自动化部署的实现

   (6) 自动化测试的实现

Maven私有库和本地库的安装与配置—-> Maven

    java开发环境(JDK)/ Eclipse IDE

    Maven3.0以上版本 下载地址:

       http://maven.apache.org/index.html

  1.本机机子环境:

      jdk1.7.0_55、apache-maven-3.3.9-bin.zip、myeclise10

 2.配置Mavean环境

       MAVEN_HOME: D:\web-server\apache-maven-3.2.3;

       path: ;%MAVEN_HOME%\bin;

 3.修改本地仓库位置

      Maven会将下载的类库(jar包)放置到本地的一个目录下,如果想重新定义这个目录的位置就需要修改Maven本地仓库的配置:

     D:\web-server\apache-maven-3.2.3\conf\settings.xml

 image.png

   依据该配置,Maven就会将下载的类库保存到固定文件中。

    通过mvn -V 检查mavean是否安装成功;

二、Maven基本介绍:

      Maven 是一个项目管理和构建自动化工具。但是对于我们程序员来说,我们最关心的是它的项目构建功能。所以这里我们介绍的就是怎样用 maven 来满足我们项目的日常需要。

      Maven 使用惯例优于配置的原则 。它要求在没有定制之前,所有的项目都有如下的结构:

 image.png

 Maven 常用命令:

mvn archetype:create 创建Maven项目

mvn compile 编译源代码

mvn deploy 发布项目

mvn test-compile 编译测试源代码

mvn test 运行应用程序中的单元测试

mvn site 生成项目相关信息的网站

mvn clean 清除项目目录中的生成结果

mvn package 根据项目生成的jar

mvn install 在本地Repository中安装jar

mvn eclipse:eclipse 生成eclipse项目文件;

清除eclipse的一些系统设置:mvn eclipse:clean 

mvnjetty:run 启动jetty服务

mvn tomcat:run 启动tomcat服务

mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类

我常用的命令是:clean install package -Dmaven.test.skip -PDEV

使用-P参数显示的激活一个profile

    Maven简介(三)——profile介绍

如何将Jar包添加到本地maven仓库:

mvn install:install-file 

 -DgroupId=net.sf.json-lib

 -DartifactId=json-lib

 -Dversion=2.1

 -Dpackaging=jar

 -Dfile=json-lib-2.1-jdk15.jar

 

mvn deploy:deploy-file -DgroupId=org.springframework 

-DartifactId=org.springframework.web.servlet 

-Dversion=3.1.1.RELEASE 

-Dpackaging=jar -Dfile=org.springframework.web.servlet-3.1.1.RELEASE.jar

-Durl=http://192.168.0.66:8081/nexus/content/repositories/releases/    

-DrepositoryId=user-releases


mavean的生命周期及常用的插件介绍:

http://www.cnblogs.com/davidwang456/p/3915031.html


Mavean版本管理:

image.png

  http://hualom.iteye.com/blog/1387708


maven pom.xml文件教程详解:

http://www.zuidaima.com/share/1781583829978112.htm

http://yanguz123.iteye.com/blog/2211224


maven 多项目管理:

https://my.oschina.net/xuqiang/blog/99854

http://www.cnblogs.com/1995hxt/p/5254448.html 


基于mavean配置多个源目录环境(用于环境区分):

  http://casheen.iteye.com/blog/540385

   https://my.oschina.net/vernon/blog/271970

 资料参考:http://blog.csdn.net/liujiahan629629/article/details/39272321

Maven私有库和本地库的安装与配置—-> Nexus

        简介 :前边简单介绍了Maven,而Maven默认提供的中央仓库是在远程网络服务Appache提供的,这对于我们开发时不合理的。如果我们没网了或者什么情况,我们怎么办?也就是说我们队中央仓库的依赖性太大。而Nexus私服则可以解决我们这个问题。先看下这张图应该大家就非才明白了:

image.pngimage.png

      这样就相当于在我们本地的局域网搭建了一个类似中央仓库的服务器,我们开始将中央仓库的一些资料下载到私服务器上,然后平时我们的maven项目就是直接访问局域网内的私服即可,既节省了网络带宽也会加速项目搭建的进程,这样对我们开发来说,对公司来说都是非常好的选择。下边简单看一下Nexus私服的简单使用:

环境配置:

        本地环境: nexus-2.14.2-01-bundle.zip 

 1、Nexus下载

       下载地址:http://www.sonatype.org/nexus/go 

 2、Nexus启动

        我下载的是zip包,解压后进入\ nexus-2.14.2-01-bundle \nexus-2.14.2-01\bin\jsw\,根据操作系统类型选择文件夹,我选的是windows-x86-64文件夹,进入后可看到如下所示bat文件。

 8081为默认的端口号,要修改端口号可进入nexus-2.14.2-01-bundle\nexus-2.14.2-01\conf\打开nexus.properties文件,修改application-port属性值就可以了。

image.png

       双击console-nexus.bat运行。游览器中输入http://127.0.0.1:8081/nexus/,出现如下图所示就代表nexus已经启动成功。

image.png 

Nexus 的仓库分为这么几类:

   hosted 宿主仓库:主要用于部署无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)以及自己或第三方的项目构件;

   proxy 代理仓库:代理公共的远程仓库;

   virtual 虚拟仓库:用于适配 Maven 1;

   group 仓库组:Nexus 通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库。

PublicRepositories:  仓库组:

     3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库

     Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库

     Central: 用来代理maven中央仓库中发布版本构件的仓库

    Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库

     Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库

     Releases: 用来部署管理内部的发布版本构件的宿主类型仓库

     Snapshots:用来部署管理内部的快照版本构件的宿主类型仓库

image.png

配置Maven使用Nexus私服

     让maven项目使用nexus作为远程仓库有两种方式,第一种是在项目的pom.xml中进行更改,让单个项目使用nexus仓库;另一种是通过修改maven的配置文件settings.xml进行更改,让所有项目都使用nexus仓库。

    pom配置:

<!-- 设定除中央仓库 (repo1.maven.org/maven2/)外的其他仓库,按设定顺序进行查询,
       如有Nexus私服, 取消注释并指向正确的服务器地址 -->
	<repositories>
		<repository>
			<id>nexus</id>
			<name>Team Nexus Repository</name>
			<url>http://192.168.0.110:6161/nexus/content/groups/public</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>

	<!-- 如有Nexus私服, 取消注释并指向正确的服务器地址 -->
	<pluginRepositories>
		<pluginRepository>
			<id>nexus</id>
			<name>Team Nexus Repository</name>
			<url>http://192.168.0.110:6161/nexus/content/groups/public</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>

	<!-- 将项目发布到私服 -->
	<distributionManagement>
		<snapshotRepository>
			<uniqueVersion>false</uniqueVersion>
			<id>nexus-snapshots</id>  <!-- settings.xml id 对应 -->
			<name>User Porject Snapshot</name>
			<url>http://192.168.0.110:6161/nexus/content/repositories/snapshots/</url>
		</snapshotRepository>
		<repository>
			<id>nexus-releases</id>
			<name>User Porject Release</name>
			<url>http://192.168.0.110:6161/nexus/content/repositories/releases/</url>
		</repository>
	</distributionManagement>

基于Mavean将项目发布私服:

     1 . 修改私服中仓库的部署策略

        Release版本的项目应该发布到Releases仓库中,对应的,Snapshot版本应该发布到Snapshots仓库中。Maven根据pom.xml文件中版本号<version>节点的属性是否包含-SNAPSHOT,来判断该项目是否是snapshot版本。如果是snapshot版本,在执行mvn deploy部署命令时,maven会自动将项目发布到Snapshots仓库。要发布项目,

         首先需要将Releases仓库和Snapshots仓库的“Deployment Policy”设置为“Allow Redeploy”:

    奇葩问题:在mvn deploy jar是:Snapshot(快照)形式的项目打包后会自动增加时间戳的部分;

    问题:http://jira.codehaus.org/browse/MNG-4452

     image.png

  2 . 配置项目的部署仓库

      在pom.xml中分别对Release版本和Snapshot版本配置部署仓库,其中id唯一,url分别对应私服中Releases和Snapshots仓库的Repository Path:

     image.png

 配置如下:

    <!– 将项目发布到私服 –>        

 <distributionManagement>

              <snapshotRepository>

                     <uniqueVersion>false</uniqueVersion>

                     <id>nexus-snapshots</id>  <!– settings.xml id 对应 –>

                     <name>User Porject Snapshot</name>

                     <url>http://192.168.0.110:6161/nexus/content/repositories/snapshots/</url>

              </snapshotRepository>

              <repository>

                     <id>nexus-releases</id>

                     <name>User Porject Release</name>

                     <url>http://192.168.0.110:6161/nexus/content/repositories/releases/</url>

              </repository>

       </distributionManagement>


 3.在settings.xml中分别为上面配置的部署仓库配置server,其中id需要分别对应上面的部署仓库id:

  image.png

4 . 发布项目

   右键pom.xml – Run As – 2 Maven build…     clean deploy;


发表评论