搭建maven环境
- 下载maven文件解压到本地
- 配置环境变量(注意:在配置maven环境变量之前确认Java的环境变量已经配置)
- 新建系统参数
MAVEN_HOME
:指定maven文件的解压路径 - 编辑系统参数
Path
:在参数末尾添加%MAVEN_HOME%\bin;
- 新建系统参数
- 在命令提示符窗口输入
mvn -version
测试maven环境是否搭建成功 修改本地maven资源库地址,默认为
${user.home}/.m2/repository
- 找到maven路径下的
./conf/settings.xml
文件,编辑settings.xml
文件
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>D:/Repositories</localRepository> ...... </settings>
- 找到maven路径下的
搭建私服
- 下载nexus文件解压到本地
- 注意2.x版本与3.x版本的使用有很大的不同,在本文中选用2.x
- 配置环境变量
- 新建系统参数
NEXUS_HOME
:指定nexus文件的解压路径 - 编辑系统参数
Path
:在参数末尾添加%NEXUS_HOME%\bin;
- 新建系统参数
- 安装nexus服务
- 在解压缩目录下的
./nexus-2.14.2-01/bin/jsw
文件夹中找到对应当前系统平台(Windows7 64位)的文件夹windows-x86-64
- 运行文件夹中的
install-nexus.bat
文件安装服务 - 安装完成后运行
start-nexus.bat
启动服务。
- 在解压缩目录下的
- 在浏览器中访问
localhost:8081/nexus
可以访问到私服可视化界面
- 点击右上角
Log In
,以管理员权限登录(用户名:admin 密码:admin123)
- 更新远程仓库Indexes(注意:此操作需要在可联通网络的电脑上操作)
- 进入
Repositories
菜单,在仓库列表中点击Central
显示Central相关选项卡 - 选择
Configuration
选项卡,修改Download Remote Indexes
为true
保存, - 右键列表中的
Central选
择Update Indexes
- 在eclipse中做一些创建maven项目、执行maven指令的操作,使得本地Repositories文件夹中的jar尽可能的充足
- 点击右上角
- 将
nexus文件夹
与Repositories
文件夹拷贝到无网络的服务器上,按上述配置maven、nexus环境,即可完成无网络私服的配置
私服仓库介绍
1. hosted
本地代理仓库,通常会部署自己的jar到该类仓库中。
- 3rd party
用于发布第三方jar
- Releases
用于发布我们自己release的jar
- Snapshots
用于发布我们自己的快照jar
2. proxy
代理的远程仓库,用于代理远程的公共仓库,如maven中央仓库
3. group
仓库组,用来合并多个hosted
、proxy
仓库,通常我们配置maven依赖仓库组
创建Maven项目
设置镜像
- 编辑settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> ...... <mirrors> <mirror> <id>nexus</id> <!-- *表示该镜像对所有仓库有效 --> <mirrorOf>*</mirrorOf> <!-- url为私服仓库组地址 --> <url>http://192.168.xxx.xxxx:8081/nexus/content/groups/public</url> </mirror> </mirrors> ...... </settings>
设置JDK,否则默认会使用1.5的JDK
- 编辑settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> ...... <profiles> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> <!-- 设置编码格式,如不设置会默认使用eclipse平台的编码格式 --> <encoding>UTF-8</encoding> </properties> </profiles> ...... </settings>
- eclipse设置
Window
>Preferences
>Java
>Installed JREs
>Execution Environments
>JavaSE-1.8
>选择对应的jdk1.8
- 设置eclipse中的maven,目前使用的较新版本的eclipse中已经包含了maven插件
Window
>Preferences
>Maven
>Installations
>选择本地maven路径
4. 创建maven项目
- 右键New
>Other...
>Maven
>Maven Project
- Use default Workspace location
>maven-archetype-quicketstart 1.1
- Group Id
:项目组织的唯一标识符com.cas
- Artifact Id
:项目的唯一标识符
5. maven默认的几个目录
- src/main/java
源代码目录
- src/main/resources
源代码资源目录
- src/test/java
测试代码目录
- src/test/resources
测试代码资源目录
- 用户自定义的源代码目录需要通过插件指定来完成自定义目录的编译和打包。(详见:[Maven插件](#maven plugins))
Maven依赖
创建依赖
- 从mvnrepository.com网上搜索需要使用的jar选择想要的版本复制Maven配置信息
<dependency> <!-- 项目组织的唯一标识符 --> <groupId>...</groupId> <!-- 项目的唯一标识符 --> <artifactId>...</artifactId> <!-- 依赖版本 --> <version>...</version> <!-- 依赖范围,默认为compile范围 --> <scope>...</scope> </dependency>
- 打开项目根目录下的
pom.xml
文件,将复制到的信息粘贴到<dependencies>
标签内保存,eclipse就会自动通过settings.xml
文件中已经配置好的镜像,从私服上下载对应的jar包到本地
- 依赖的冲突:同时引用了同一个依赖的两个不同版本,则依据使用
pom.xml
文件中先引用的版本 - 依赖范围,默认的依赖返回为
complie
test
依赖:测试范围内有效,在编译和打包时都不会使用该依赖compile
依赖:编译范围内有效,在编译和导报是都会将依赖存储进去provided
依赖:在编译和测试的过程有效,最后生成jar包时不会加入runtime
依赖:运行的时候有依赖,但编译的时候不依赖import
system
Maven常用命令
- 命令提示符中运行maven命令
mvn clean
——表示运行清理操作(会默认把target文件夹中的数据清理)mvn clean compile
——表示先运行清理之后运行编译,会见代码编译到target文件夹中mvn clean test
——表示运行清理和测试mvn clean package
——表示运行清理和打包mvn clean install
——表示运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用mvn clean deploy
——表示运行清理和发布(发布到私服上面)- 注意以上命令需跳转至项目根目录下执行
- eclipse中运行maven命令
- 右键项目弹出菜单
Run As
>Maven build...
>在Goals
文本框中输入maven运行命令
- 右键项目弹出菜单
- maven命令对应执行maven插件,一些maven命令需要我们扩展插件来执行。
Maven生命周期
maven命令运行的过程叫做生命周期,对于maven而言有三套生命周期
1. clean
用于清理生命周期:
- pre-clean
执行需要在clean前完成的工作
- clean
移除所有上一次构建生成的文件
- post-clean
执行一些需要在clean之后立刻完成的工作
2. compile
用于编译的生命周期:
- validate
- generate-sources
- process-sources
对源文件进行生成和处理
- generate-resources
- process-resources
复制并处理资源文件至目标目录,准备打包
- compile
编译项目的源代码
- process-class
- generate-test-sources
- process-test-sources
- generate-test-resources
- process-test-resources
复制并处理资源文件至目标测试目录
- test-compile
编译测试源代码
- prepare-package
- package
接受编译好的代码,打包成可发布的格式,如jar
- pre-integration-test
- integration-test
- post-integration-test
- verify
- install
将包安装至本地仓库,以让其他项目依赖
- deploy
将最终的包复制到远程的仓库,以让其他开发人员与项目共享
3. site
用于发布站点的生命周期:
- pre-site
执行一些需要在生成站点之前完成的工作
- site
生成项目的站点文档
- post-site
执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy
将生成的站点文档部署到特定的服务器上
Maven插件
插件是maven的核心,所有执行的操作都基于插件来完成的
为了让一个插件中可以实现众多的类似功能,maven为插件设定了目标,一个插件中有可能有多个目标
其实生命周期中的重要的每个阶段都是由插件的一个具体目标来执行的
1. 我们可以从maven.apache.org/plugins上查找我们需要的插件,并配置到项目根目录的pom.xml
文件中
配置
pom.xml
文件,自定义资源目录<build> <plugins> <plugin> <!-- 声明绑定插件 --> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helpr-maven-plugin</artifactId> <version>1.12</version> <executions> <execution> <id>add-sources</id> <!-- 指定绑定的生命周期 --> <phase>generate-sources</phase> <!-- 绑定插件在package生命周期执行目标 --> <goals> <goal>add-sources</goal> </goals> <!-- 设置参数 --> <configuration> <sources> <source>src/cas/java</source> </sources> </configuration> </execution> </executions> </plugin> </plugins> </build>
导出依赖jar包到指定文件夹
<plugin> <!-- 声明绑定插件 --> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helpr-maven-plugin</artifactId> <!-- 设置参数 --> <configuration> <!-- 指定依赖jar包导出目录,${project.build.directory}表示target目录 --> <outputDirectory>${project.build.directory}/lib</outputDirectory> <!-- 不包含间接依赖的包 --> <excludeTransitive>false</excludeTransitive> <!-- 复制的jar文件去掉版本信息 --> <stripVersion>true</stripVersion> </configuration> </plugin>
Maven发布本地项目到私服
配置
pom.xml
文件设置发布位置<distributionManagement> <!-- 快照版本发布地址 --> <snapshotRepository> <id>snapshots</id> <name>...</name> <url>http://192.168.xxx.xxx:8081/nexus/content/repositories/snapshots</url> </snapshotRepository> <!-- releases版本发布地址 --> <repository> <id>releases</id> <name>...</name> <url>http://192.168.xxx.xxx:8081/nexus/content/repositories/releases</url> </repository> </distributionManagement>
配置
setting.xml
文件设置server权限<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> ...... <servers> <server> <!-- id对应pom.xml中repository的id --> <id>snapshots</id> <!-- nexus默认admin、deployment用户有发布权限 --> <username>deployment</username> <password>deployment123</password> </server> <server> <!-- id对应pom.xml中repository的id --> <id>releases</id> <!-- nexus默认admin、deployment用户有发布权限 --> <username>deployment</username> <password>deployment123</password> </server> </servers> ...... </settings>
- 以
admin
权限登录http://192.168.xxx.xxx:8081/nexus
修改Releases仓库Deployment Policy
的属性为Allow Redeploy
- 执行maven命令
clean deploy
发布项目
- 注意项目下
pom.xml
文件中<version>
标签内的值若后缀`-SNAPSHOT
则会发布为快照版本,其他发布为release版本
- 注意项目下