欢迎光临
我们一直在努力

Day 68 应用工具_Jenkins 创建 maven 项目

Jenkins 创建 maven 项目

什么是 Maven?

Maven 是一个项目管理和综合工具。Maven 提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven 使用标准的目录结构和默认构建生命周期。
Maven 简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven 增加可重用性并负责建立相关的任务。
Maven 项目的结构和内容在一个 XML 文件中声明,pom.xml 项目对象模型(POM),这是整个 Maven 系统的基本单元。用来管理项目的构建,相关性和文档。最强大的功能就是能够自动下载项目依赖库。

Centos 7 下安装 Maven

# 安装 JDK rpm -ivh jenkins-2.72-1.1.noarch.rpm # 获取 Maven 安装文件: 官网:http://maven.apache.org/download.cgi 清华镜像:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/ wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/ apache-maven-3.3.9-bin.tar.gz rpm -ivh apache-maven-3.3.9-bin.tar.gz

配置 Maven

编辑 /etc/profile 文件,在末尾添加 export PATH=/usr/local/apache-maven-3.3.9/bin/:$PATH ,将 maven 命令加入系统环境变量

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 

source /etc/profile mvn -v

认识 Maven 安装目录

安装完成后,maven 的安装目录结构如下:

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 

bin:该目录包含了 mvn 运行的脚本,这些脚本用来配置 java 命令,准备好 classpath和相关的 Java 系统属性,然后执行 Java 命令。其中 mvn 是基于 UNIX 平台的脚本,mvn.bat是基于 Windows 平台的脚本。
boot:该目录只包含一个文件,该文件是一个类加载器框架,Maven 使用该框架加载自己的类库。
conf:该目录包含了一个非常重要的文件 settings.xml。用于全局定义 Maven 的行为。也可以将该文件复制到~/.m2/目录下,在用户范围内定制 Maven 行为。
Lib:该目录包含了所有 Maven 运行时需要的 Java 类库。

常用 maven 命令

首先我们创建一个名为 hello-world 的 Maven 项目,项目的目录结构如下

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 

我们在此项目的基本上测试常用的 maven 命令
mvn clean 命令用于清理项目生产的临时文件,一般是模块下的 target 目录

mvn clean

mvn package 命令用于项目打包,会在模块下的 target 目录生成 jar 或者 war 等文件

mvn package

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 

mvn test 命令用于测试,用于执行 src/test/java/ 下的测试用例,使用-Dmaven.test.skip=true 参数可以跳过测试

mvn test

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 

mvn install 命令用于模块安装,将打包好的 jar/war 文件复制到你的本地仓库中,供其他模块使用

mvn install

Day 68 应用工具_Jenkins 创建 maven 项目

Maven 仓库

在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven 在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地方)任何的构件都有唯一的坐标,Maven 根据这个坐标定义了构件在仓库中的唯一存储路径。

Maven 仓库分为两类:本地仓库和远程仓库。远程仓库又可以大致分为以下三类:中央仓库,这是 Maven 核心自带的远程仓库,它包含了绝大部分开源的构件;私服是一种特殊的远程仓库,一般是为了节省带宽和时间,在企业局域网内架设的一个私有仓库服务器(如nexus)用其代理所有外部的远程仓库,内部的项目还可以部署到私服上供其他项目使用;还有就是其他的公开的远程仓库,常见的有 Java.net Maven 库、JBoss Maven 库等。

默认配置下,Maven 根据坐标寻找构件的时候,首先他会查看本地仓库,如果本地仓库存在,则直接使用;如果本地仓库不存在,则 Maven 就会去远程仓库查找,存在则先下载到本地仓库使用,不存在 Maven 就会报错。

本地仓库

顾名思义,就是 Maven 在本地存储构件的地方。maven 的本地仓库,在安装 maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。maven 本地仓库的默认位置:无论是 Windows 还是 Linux,在用户的目录下都有一个.m2/repository/的仓库目录,这就是Maven 仓库的默认位置。这个可以通过修改.m2/settings.xml 文件(不存在可以创建)或者maven 安装目录/conf/settings.xml 进行配置。

在 settings.xml 文件中,设置 localRepository 元素的值为想的仓库地址即可。

<settings> <localRepository>/opt/maven_repository</localRepository> </settings>

通过我们建议修改.m2 目录下的 setting.xml 文件,修改只针对用户。

远程仓库

说到远程仓库先从最核心的中央仓库开始,中央仓库是默认的远程仓库,maven 在安装的时候,自带的就是中央仓库的配置,所有的 maven 项目都会继承超级 pom,具体的说,包含了下面配置的 pom 我们就称之为超级 pom

<repositories> <repository> <id>central</id> <name>Central Repository</name> <url>http://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>

中央仓库包含了绝大多数流行的开源 Java 构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的 Java 项目依赖的构件都可以在这里下载得到。
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。当 Maven 需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为 Maven 的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。
Maven 私服的 个特性:
1.节省自己的外网带宽:减少重复请求造成的外网带宽消耗
2.加速 Maven 构件:如果项目配置了很多外部远程仓库的时候,构建速度就会大大降低
3.部署第三方构件:有些构件无法从外部仓库获得的时候,我们可以把这些构件部署到内部仓库(私服)中,供内部 maven 项目使用
4.提高稳定性,增强控制:Internet 不稳定的时候,maven 构建也会变的不稳定,一些私服软件还提供了其他的功能
5.降低中央仓库的负荷:maven 中央仓库被请求的数量是巨大的,配置私服也可以大大降低中央仓库的压力
当前主流的 maven 私服:1.Apache 的 Archiva、2.JFrog 的 Artifactory、3.Sonatype的 Nexus

配置使用远程仓库

平时的开发中,我们往往不会使用默认的中央仓库,默认的中央仓库访问的速度比较慢,访问的人或许很多,有时候也无法满足我们项目的需求,可能项目需要的某些构件中央仓库中是没有的,而在其他远程仓库中有,如 JBoss Maven 仓库。这时,可以在 pom.xml 中配置该仓库,代码如下:

<!-- 配置远程仓库 --> <repositories> <repository> <id>jboss</id> <name>JBoss Repository</name> <url>http://repository.jboss.com/maven2/</url> <releases> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> </releases> <snapshots> <enabled>false</enabled> <checksumPolicy>warn</checksumPolicy> </snapshots> <layout>default</layout> </repository> </repositories>

repository:在 repositories 元素下,可以使用 repository 子元素声明一个或者多个远程仓库。
id:仓库声明的唯一 id,尤其需要注意的是,Maven 自带的中央仓库使用的 id 为 central,如果其他仓库声明也使用该 id,就会覆盖中央仓库的配置。
name:仓库的名称,让我们直观方便的知道仓库是哪个,暂时没发现其他太大的含义。
url:指向了仓库的地址,一般来说,该地址都基于 http 协议,Maven 用户都可以在浏览器中打开仓库地址浏览构件。

releases 和 snapshots:用来控制 Maven 对于发布版构件和快照版构件的下载权限。需要注意的是 enabled 子元素,该例中 releases 的 enabled 值为 true,表示开启 JBoss 仓库的发布版本下载支持,而snapshots 的 enabled 值为 false,表示关闭 JBoss 仓库的快照版本的下载支持。根据该配置,Maven 只会从 JBoss 仓库下载发布版的构件,而不会下载快照版的构件。 

layout:元素值default表示仓库的布局是Maven2及Maven3的默认布局,而不是Maven1的布局。基本不会用到 Maven1 的布局。
其他:对于 releases 和 snapshots 来说,除了 enabled,它们还包含另外两个子元素updatePolicy 和 checksumPolicy。

元素 updatePolicy 用来配置 Maven 从远处仓库检查更新的频率,默认值是 daily,表示 Maven 每天检查一次。其他可用的值包括:never-从不检查更新;always-每次构建都检查更新;interval:X-每隔 X 分钟检查一次更新(X 为任意整数)。

元素 checksumPolicy 用来配置 Maven 检查校验和文件的策略。当构建被部署到 Maven仓库中时,会同时部署对应的检验和文件。在下载构件的时候,Maven 会验证校验和文件,如果校验和验证失败,当 checksumPolicy 的值为默认的 warn 时,Maven 会在执行构建时输出警告信息,其他可用的值包括:fail-Maven 遇到校验和错误就让构建失败;ignore-使Maven 完全忽略校验和错误。

利用 Nexus 搭建私有 Maven 库

Nexus 介绍

Nexus 是一个强大的 Maven 仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。
Nexus 在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间。
Nexus 是一套“开箱即用”的系统不需要数据库,它使用文件系统加 Lucene 来组织数据。
Nexus 使用 ExtJS 来开发界面,利用 Restlet 来提供完整的 REST APIs,通过 m2eclipse 与 Eclipse 集成使用。
Nexus 支持 WebDAV 与 LDAP 安全身份认证。
Nexus 还提供了强大的仓库管理功能,构件搜索功能,它基于 REST,友好的 UI 是一个
extjs 的 REST 客户端,它占用较少的内存,基于简单文件系统而非数据库。

安装

# 安装jdk rpm -ivh jenkins-2.72-1.1.noarch.rpm # 获取 Nexus 安装包 # https://www.sonatype.com/download-oss-sonatypewget https://www.sonatype.com/oss-thank-you-tar.gz # 安装 Nexus tar xf nexus-3.13.0-01-unix.tar.gz mv nexus-3.13.0-01 /usr/local/ ln -s /usr/local/nexus-3.13.0-01/ /usr/local/nexus # 启动 nexus /usr/local/nexus/bin/nexus start

上面启动成功后会警告不要使用 root 用户启动,这里可以新建一个用户,也可以指定 root 用户启动,使他不出现警告,下面配置指定 root 用户启动,编辑 bin 目录下的 nexus.rc 文件,修改内容为:run_as_user="root"。

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 配置 Maven  项目使用 Nexus  仓库

在 maven 的 setting.xml 文件中配置私服配置,这种方式配置后所有本地使用该配置的maven 项目的 pom 文件都无需配置私服下载相关配置
在<profiles></profiles>之间加入下面的配置

<profile> <id>my-nexus</id> <repositories> <!-- 私有库地址--> <repository> <id>nexus</id> <name>nexus</name> <url>http://10.0.0.13:8081/repository/maven-public/</url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <pluginRepositories> <!--插件库地址--> <pluginRepository> <id>nexus</id> <url>http://10.0.0.13:8081/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile>

在<settings></settings>之间加入下面的配置,激活使用上面的配置
<activeProfiles>
<activeProfile>my-neuxs</activeProfile>
</activeProfiles>
注:profile 名字要对应
在<mirros></mirros>之间加入如下配置

<mirror> <id>nexus-myself</id> <!--*指的是访问任何仓库都使用我们的私服--> <mirrorOf>*</mirrorOf> <name>Nexus myself</name> <url>http://10.0.0.13:8081/repository/maven-public/</url> </mirror>

配置完成后,当我们再次执行 mvn 命令时,下载构件的地址变为我们的私服地址

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 

 我们的私服也缓存了相应的构件在本地

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 Day 68 应用工具_Jenkins 创建 maven 项目

 

 

创建 Maven Job

1、在 Gitlab 创建一个 java 的代码仓库,我们把前面在命令使用的 helloword 项目初始化为一个 git 仓库,然后 push 到我们的 Gitlab 上(具体方法请参考前面相关内容)。

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 2、在 jenkins 配置 maven

打开系统管理—>全局工具配置页面,下拉新增一个 maven 配置。

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 3、回到 Jenkins 主页面,点击“新建 Item”进入创建 Job 页面

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 4、输入 Job 名称,选择 maven 类型,点击确认按钮,创建 job,进入 job 配置页面

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 通用部分配置“丢弃旧的构建”

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 源码管理配置从 git 仓库获取我们 helloword 仓库的代码

Day 68 应用工具_Jenkins 创建 maven 项目

 

 

 配置要执行的 maven 命令,保存配置,返回 job 主页面,执行构建。在“工作空间”我们可以看到构建后的产物。

Day 68 应用工具_Jenkins 创建 maven 项目

 

 Day 68 应用工具_Jenkins 创建 maven 项目

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《Day 68 应用工具_Jenkins 创建 maven 项目》
文章链接:https://www.456zj.com/38099.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址