1.1 Maven
1.1.1 相关概念
Maven是一个软件项目管理工具,通过它可便捷的管理项目的生命周期。即项目的jar包依赖,开发,测试,发布打包、版本等。虽然目前的IDE工具(如eclipse)可管理开发、发布、打包工作,但还没有形成一套完成的体系。
Maven有以下几个功能特点:
1、 jar包依赖
这个也许会maven最突出的特点。使用maven进行开发时,不需要上网单独下载jar包,只需要在配置文件pom.xml中配置jar包的依赖关系,就可以自动下载jar包到我们的项目中(在联网情况下,maven可自动从https://repo.maven.apache.org/maven2中下载所需要的jar包。如果无法联网,可搭建基于Nexus私服的中央库并提供jar包下载)。这样,别人开发或者使用这个工程时,不需要来回的拷贝jar包,只需要复制这个pom.xml就可以自动的下载这些jar包。而且,我们自己下载jar包,还有可能造成版本的不一致,这样在协同开发的过程中就有可能造成代码运行的不一致。通过使用maven精确的匹配jar包,就不会出现这种问题了。
以下是一个项目的pom.xml中对jar包依赖的描述:
<dependencies>
<!-- spring需要的jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.4.RELEASE</version>
<type>jar</type>
</dependency>
</dependencies>
2 项目坐标
Maven通过特定的标识来定义项目名称,这样既可以唯一的匹配其他的jar包,也可以通过发布,使别人能使用自己的发布产品。这个标识就被叫做坐标,长的其实很普通,就是简单的xml而已。比如,以下为一个web项目的项目坐标描述信息(在该项目的pom.xml文件的开始位置)
<groupId>com.nci</groupId>
<artifactId>first_maven</artifactId>
<version>1.0.0</version>
<packaging>war</packaging>
各字段说明:
groupId:所述的项目名称,由于有的项目并不是一个jar包构成的,而是由很多的jar包组成的。因此这个groupId就是整个项目的名称。
artifactId:包的名称。
version:版本号。
packaging:包的类型,一般都是jar,也可以是war之类的。如果不填,默认就是jar。War代表web项目。
3 测试驱动
Maven是测试驱动的开发思路,因此工程创建初期,就包含两个文件夹,main和test。一个用于放置开发的java文件,一个用于写test单元测试。这样每次开发的时候,提前设计单元测试,就能帮助减少BUG。
1.1.2 安装
1、 下载:到apache官网下载apache-maven-3.3.9-bin.zip,解压放置到某个目录下(如D:\run_enviroment\apache-maven-3.3.9)
2、 设置系统环境变量:
新建系统变量MAVEN_HOME= D:\run_enviroment\apache-maven-3.3.9;然后将将这个系统变量添加到系统变量path中“%MAVEN_HOME%\bin”
3、 测试:在命令行中执行mvn –version,可显示maven的版本号
1.1.3 设置
1、设置镜像库地址
Maven默认的中央库地址为https://repo.maven.apache.org/maven2,但目前从这个地址下载jar不太稳定。因此,设置一个稳定的镜像库代替默认的中央库,以便maven可以从这个镜像库中下载项目依赖的jar包。
在D:\run_enviroment\apache-maven-3.3.9\conf\settings.xml中设置镜像库的地址,如下
<mirror>
<id>central</id>
<mirrorOf>*</mirrorOf>
<name>central-mirror</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
2、设置本地资源库位置
Maven会将当前项目需要的jar包从中央库中下载到各个开发机的磁盘上,这称为Local Repository。默认的Local Repository位置为C:\Users\用户名\.m2\repository。但可以手动修改settings.xml文件中的相关内容来重新设置Local Repository的位置。
1.2 基于Maven在Eclispe中开发项目
1.2.1 配置eclispe使用的maven(前提是已有maven插件)
1、在eclipse中设置maven的配置文件路径(即设置settings.xml)以及本地资源库的位置。
1.2.2 创建maven工程
1、 直接点击新建,在里面可以找到Maven选项卡,点击MavenProject创建Maven工程
2、 选择默认的工程位置
初次使用时,可以勾选“create asimple project(skip archetype selection)”,这样就比较简单。Archetype应该是一些类似模板的东西,选择不同的模板后,maven就会创建基础的东西,方便开发。
3、 填写相关的groupIdartifactId version等信息。
Packaging类型设置为war时,将建立web项目。Packaging的默认值为jar,代表创建的项目为javaproject。
点击完成就创建好了一个简单的mavenweb工程。目录结构如下:
pom.xml:用于定义或者添加jar包的依赖
src/main/java:用于存放java源文件
src/main/resource:存放java类使用的资源文件
src/main/webapp:存放页面文件(类似于创建DynamicWeb Project时生成的web content文件件)
src/test:用于存放测试用例。
target:生成对应的class文件或发布的jar包。
4、 创建web项目需要的文件夹、文件
在第3步中生成的webproject上有x,是因为缺少web.xml文件。因此,可以从别的项目中复制web-inf/web.xml文件夹及文献到webapp文件夹下,形成下面的目录结构。
到此为止,一个使用maven创建的web项目就成功了。编译的结果在target中的war包。
1.2.3 项目的maven属性
1、 设置java编译器版本
2、 添加依赖的jar包
在项目的pom.xml中添加当前项目依赖的jar包,然后执行maven->update project则可从中央库中下载所需要的jar包到本地库。
<dependencies>
<!-- spring需要的jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.4.RELEASE</version>
<type>jar</type>
</dependency>
</dependencies>
1.3 Nexus私服
1.3.1 概念
1、功能、原理及结构
在使用maven进行开发时,依赖的jar包是从中央库中下载,而中央库都是在互联网上部署的。而有的企业是不开放互联网访问的。因此,需要在内网部署一套类似中央库的系统,这个系统一方面可以从互联网上部署的中央库下载jar包,一方面又可以为内网的本地maven提供jar包下载。这个东西就被称为“私服”。
私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载(也就是说,是开发机上的maven请求jar下载时,才会触发nexus从外部远程仓库中下载依赖的jar,nexus本身并不会去远程仓库中下载jar)。原理如下如所示:
常用的私服有:Apache Archiva,Artifactory,Sonatype
Nexus。这里我们使用 Sonatype Nexus。
2、仓库类型:点击左侧 Repositories链接,查看 Nexus内置的仓库:
Nexus 的仓库分为这么几类(type字段):
· hosted 宿主仓库:主要用于部署无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)以及自己或第三方的项目构件。nexus内置了三个host库。
3rd party:第三方库,如mysql 的jdbc驱动jar
Release:自己开发的release版本的jar
Snapshots:自己开发的snapshot版本的jar(可理解为测试版本)
· proxy 代理仓库:代理公共的远程仓库;
· virtual 虚拟仓库:用于适配 Maven 1;
· group 仓库组:Nexus 通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库。Nexus内置了一个group仓库组“public repositories”,这个仓库组包含了4个仓库。
1.3.2 安装及配置
1、 下载开源版本的Nexus OSS,nexus-2.11.3-01.zip。这个版本自带了jetty作为应用服务器。
2、 解压放置都某个目录下,这里目录为D:\run_enviroment
3、 生成window服务:进入
D:\run_enviroment\nexus-2.11.3-01\bin\jsw\windows-x86-64,
点击“install-nexus.bat”,将nexus注册为windows service。
4、 在window中启动nexus,然后在浏览中访问:localhost:8081/nexus,账号密码为admin/admin123
5、 配置中央库:
设置Remote Storage Location=http://repo1.maven.org/maven2/;默认的https方式出现异常,应该是证书的问题,所以修改为http方式。
Download Remote Indexes=true,这样就能在“ArtifactSearch”中进行检索了。
1.3.3 添加第三方jar到3rdrepository
1.3.4 使maven使用nexus私服
在每台开发机上的maven配置文件settings.xml中添加mirror,如下图所示。
设置mirroof=*,则maven的所有请求都早当前mirror
url即为已配置好的nexus的group repositiores地址。