{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

俗话来讲什么是maven?什么是jenkins?两者的区别是什么?

FreemanFreeman 回答0 收藏1
收藏问题

7条回答

tuomao

tuomao

回答于2022-06-28 12:03

maven是一个JAVA项目管理工具,而Jenkins是一个基于Java开发的持续集成工具。接下来,我们分别来介绍它们到底是什么。

maven

作为Java开发工程师,我是非常喜欢maven的。我自己有时候需要自己写小的程序来处理些繁琐数据的时候,也是喜欢用maven的。首先,在目前的eclipse和intelliJ IDE中,创建MAVEN工程的代价非常小,在new project的时候就可以直接选择maven project而不是传统的java project。

创建了project之后,需要配置pom文件。如果你已经有过maven项目,只需要把原来的pom文件的内容复制过来即可,需要修改的部分是artifact,groupId这类用于把当前maven工程区别去过去的maven工程的参数。

还有就是为了干净整洁,可以把无用的dependency都删除。说到dependency,这真是我最喜欢的maven能力之一了。我们过去用普通的java project,如果需要引入第三方jar包,通常需要你自己去网上找到这个jar包下载到本地,再在build path(eclipse)或project structure(IntelliJ)里手动为当前project添加对这个jar包的依赖,才能import这个jar包,使用它的功能。然而有了pom文件,你需要在百度上输入“{jar包名称} dependency”就能在网上找到对应的代码。如下,只需要把这段代码放到pom文件的dependencies标签下,mavan自己就会去帮你下载这个jar包,随后直接在工程里使用这个jar包的功能就可以了,极大的节约了时间和精力。

Jenkins

Jenkins并不是一个在开发过程中使用工具,而是监控持续重复的工作,使软件的持续集成成为可能。我分享下我们项目组使用的Jenkins方式。

我们写完代码后,上传到统一的代码库,然后由Jenkins去触发一个job,就会对制定代码库的代码就行打包,打成一个war包放在指定地点,之后触发第二个job,会根据Jenkins里的不同配置,把war包拉到指定的Linux机器上,最后再开始部署以及Nginx的热切换。Jenkins可以理解为一个可手动触发,也可定时触发的任务,主要应用场景是实行代码更新后的持续集成,保证代码库里的代码的稳定性。

但是我们现在正在主张去Jenkins化,使用我们自己开发的一些敏捷开发工具来代替Jenkins的工作。

maven和Jenkins能做的事远不止上面提到的这些,比如maven还能够连接不同仓,打包等等,今天就简单介绍到这里,欢迎大家在下方评论区与我沟通讨论。

我是苏苏思量,来自BAT的Java开发工程师,每日分享科技类见闻,欢迎关注我,与我共同进步。

评论0 赞同0
  •  加载中...
wangshijun

wangshijun

回答于2022-06-28 12:03

还是按照我的理解给大家解释一下什么是Maven,什么是Jenkins。

如果有理解不对的地方,请大家留言指正。


Maven

Apache Maven is a software project management and comprehension tool.

比较官方的定义:Maven是一个项目管理工具,也有说构建工具的。


很多人都说Maven是管理jar包的,这个只是他众多功能中的一个,Maven的作用贯穿于项目的整个生命周期。

啥叫项目周期...项目开发、编译、测试、打包、集成测试、部署,这些就是项目的生命周期,所以Maven可以协助开发、编译、测试、打包、集成测试、部署,它都可以做!(其实真正做的不是Maven,它只是找了帮手去做这些事情,下面会讲到)


我们经常使用的管理jar包的功能:有一个中央仓库,存了好多好多jar包,每个jar包不同的版本都存了。你想用什么jar包,只需要在Maven的配置文件中(pom.xml)配置一下,写好用什么jar包,什么版本即可,Maven会自动帮你下载jar包;你依赖的jar包如果还依赖其他jar包的话,它也可以帮你下载下来。(这也是简单的介绍下功能,实际上比这个要复杂很多)


Maven还是一个依赖插件()执行的框架,Maven不做实际的工作,每个任务实际上是由插件完成。

介绍一下我们经常用的几个插件:

  • maven-dependency-plugin:帮助分析项目依赖。比如我的项目以来的A.jar,而A.jar又依赖了B.jar...然后一层套着一层,这个插件就是管理这个的。比如dependency:list能够列出项目最终解析到的依赖列表。
  • protobuf-java-format:谷歌出品,做代码format的工具,项目构建的时候,工具自动回帮助你把代码进行格式化,比如代码的缩进是几个空格。

  • maven-resources-plugin:Maven将Java代码文件和资源文件区分开,maven-resources-plugin就是用来处理资源文件。资源文件中的属性可以使用占位符${propertyName},而这个属性可能在开发环境、测试环境、生产环境上不同,这种场景可以使用Maven的profile来支持,每个profile都可以独立维护一套参数值,在mvn package的时候灵活指定。

  • wagon-maven-plugin:用于一键部署,把本地打包的jar文件,上传到远程服务器上,并执行服务器上的shell命令。


插件非常多,就不一一介绍了。

可以看出来,mvn就是一个集成商,提供了很多插口,你想要什么功能,比如你想做集成测试,那么你就告诉mvn你要做集成测试(pom.xml文件中配置),mvn就帮你把集成测试的组件插到插孔里面了,然后你执行一个mvn xxx的命令,系统就可以跑集成测试了。


Jenkins

官方说法:Jenkins是持续构建的可视化web工具。

直白点儿说:项目的自动化编译、打包、部署,我提交了代码之后(svn/git),Jenkins会自动的把代码拿下来,编译好,编译之前可能要跑测试,测试通过之后项目直接打包,然后部署到服务器上面。


可以看出来,很多事情Jenkins也不自己做,也是和Maven做集成(也可以和ant、gradle集成),跑测试、编译、打包这些也都是Maven在做的。


希望我的回答可以帮助到你!

评论0 赞同0
  •  加载中...
airborne007

airborne007

回答于2022-06-28 12:03

我叫souvc,在互联网公司做技术研发,现在的公司就是通过Maven来管理Java项目的Jar包,通过Jenkins来构建Java项目以及发布到测试,正式环境。所以我来回答一下这个题目。希望能帮到大家!

一、Maven是何物?

Maven是Apache 开源的一个软件。

比较专业的说法

Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以管理一个项目的构建、报告和文档,从一个中心的信息。

比较通俗的说法

Apache Maven 是一个管理Java项目Jar包依赖的一个工具,有了它就不用一个个的Jar放到Java项目中,同时还能通过Maven去构建Java项目,使得编译一个Java项目更加的简单,方便。

Maven优点

  1. Maven提高了程序员的生产效率。

  2. Maven使得项目转移更加方便。

Maven的使用,使得源代码中不用带Jar包,使得源代码之间的转移更加方便。因为它可以引用本地的Jar包。

二、Jenkins是何物?

比较专业的说法

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

比较通俗的说法

Jenkins就是一个辅助发布,构建Java项目的工具,原来通过写Linux脚本来执行的事情,交给Jenkins来做,释放程序员的双手,不用经常的手动执行脚本。通过Jenkins来达到自动化部署,自动化运营的目的。


三、小结

通俗一点说

俩者的区别

Maven是管理Jar的工具,是方便程序员管理Jar包的。而Jenkins是自动化构建工具,是提高程序员发布Java应用的效率的。它们专注点不一样。

俩者的共同点

Maven也可以发布应用,Jenkins也可以依赖Maven进行构建项目。

当然还有很多其他的功能,在这里就不一一列出来了。如有其他不明,可以在评论区留言,详细为大家解答!

我是souvc,请关注我,给大家分享相关的互联网技术。

评论0 赞同0
  •  加载中...
paulli3

paulli3

回答于2022-06-28 12:03

我们知道,任何一款软件都是先由程序员在本地环境中开发,然后再部署到线上环境的。传统的部署方式是手工复制文件、进行参数配置、再来部署的,假设一个项目需要频繁发布这种手动方式就显得很慢了,于是也就有了自动化发布系统。

中型以上项目会涉及到自动化构建及发布,而这一切离不开Maven和Jenkins,那什么是Maven和Jenkins呢?两者又有什么区别呢?

Maven是用来解决项目依懒关系的

Java开发者肯定接触过Maven,在Maven出现之前如果我们要导入jar包,都是复制jar包文件到指定目录来实现导入的,但是这种方式就存在jar包依懒和冲突的问题:

  • 可能重复引用了相同的jar包;

  • 团队开发中不同开发者引用的jar包不同,存在冲突等。

Maven的出现就完美的解决了这些尴尬,它会自动帮我们管理jar包,如果某个jar包有其它依懒,Maven也会帮你把这些依懒包下载导入进来,十分方便。

Jenkins是用来负责构建发布的

Jenkins是一款基于Java开发的持续集成工具,可以自动化构建及测试软件项目。

如何理解呢?大致是这样的流程:

我们写完代码后将代码上传到Git仓库(或SVN)中 => 然后由Jenkins来触发一个Job任务 => Jenkins就会自动将项目打包 => 然后发布到指定服务器上(将Git中的项目同步至服务器上)=> 进行指定的操作(如重启服务)。

Maven和Jenkins的区别及关系

看下去Maven和Jenkins都是用来构建项目的,但是这两者是有很大区别的。

  • Maven偏项目开发管理,主要是解决项目依懒问题;

  • Jenkins偏运维管理,让运维从繁琐的发布工作中解脱出来。

虽说两者定位不同,但一个项目想自动化构建发布,这两者往往是配合使用的,通常是用Jenkins来构建一个Maven项目,即:Jenkins利用项目中的pom文件可以减轻构建配置工作。

评论0 赞同0
  •  加载中...
linkin

linkin

回答于2022-06-28 12:03

Maven一般用于构建工程(设置项目的classpath,用于加载第三方Jar包等),也可以借助第三方插件,实现发布等功能!

Jenkins是持续集成工具,一般用于发布和管理最终产品,在集成了版本控制插件后,可以实现自动部署和发布。

两者的侧重点不同,但可以相辅相承,Jenkins中的Maven插件,可以让你的部署自动化……


评论0 赞同0
  •  加载中...
Rindia

Rindia

回答于2022-06-28 12:03

两者之间没有什么可比较的,完全是两个领域

评论0 赞同0
  •  加载中...
Aklman

Aklman

回答于2022-06-28 12:03

你要做饭...maven就是买菜的...jenkins是炒菜的...

评论0 赞同0
  •  加载中...

相关问题

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<