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

屋里取闹8023


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开发工程师,每日分享科技类见闻,欢迎关注我,与我共同进步。


苏苏思量


还是按照我的理解给大家解释一下什么是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在做的。


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


会点代码的大叔


我叫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,请关注我,给大家分享相关的互联网技术。


souvc


简单来说Maven是一套JAVA软件开发的规矩,可以帮助开发人员提升开发效率;jenkins则是一个持续集成工具,可以实现软件的测试/发布的自动化。两者是在软件工程不同阶段的工具,Maven在开发阶段,jenkins则是在测试/发布阶段。

maven和jenkins是软件开发中不同阶段使用的工具

Maven是一个JAVA软件项目管理工具,可以说已经是JAVA软件项目管理的事实标准,目前大多数商业JAVA项目都使用Maven进行管理。Maven对项目的构建,编译,依赖,文档等进行管理,简化了这部分工作,使工程师更专注于业务开发。

Jenkins为集成测试以及软件发布提供自动化支持。软件测试阶段,项目需要频繁的修复和发布,如果人工执行,将浪费大量的人力,jenkins解决了这一问题,提高了测试的效率。jenkins可以集成多种构建工具,如果项目使用maven进行管理,jenkins也可以方便的集成maven,完成编译和打包工作。

希望能解答题主的疑问。同时欢迎大家讨论和指正。


java老菜鸟


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

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

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



AngryRED


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


linuxsuren


什么是唛个?意思讲:这个东西是什么?

什么是这个?意思讲:怎么会这个东西。


分享到:


相關文章: