前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何理解Maven与制品库相关概念?

如何理解Maven与制品库相关概念?

作者头像
DevOps云学堂
发布2020-03-25 18:08:51
3.4K0
发布2020-03-25 18:08:51
举报
文章被收录于专栏:DevOps持续集成DevOps持续集成

本文的目的是向您快速介绍工件,Maven,Maven存储库管理器和Maven私有存储库。我们希望它是有用的,并且如果这些概念对您来说是新的(特别是如果您正在开始新的JVM开发工作),那么这对您来说将使事情变得更加清晰。

多年来,我们一直在与其他人一起工作并帮助他人学习Maven和与Maven存储库相关的所有事物。如果您想查看任何更多信息,演练,操作指南等,请告诉我们。我们一直在寻找优质内容的好主意,而最好的主意通常来自刚学习Maven的人!

如果您刚刚加入Java软件工程团队,或者最近成为Java开发人员,您可能会问自己:“ Maven是什么?我为什么需要它?”。问您的同事,他们可能会回答类似“ Maven存储库是我们存储所有工件的位置”的内容。

本文假定您对Java生态系统的专业领域还比较陌生。它将回答以下问题,这些问题肯定会在您从事新工作的前几周出现:

  • 什么是artifact?
  • 什么是Maven?
  • 什么是Maven存储库?
  • 私有Maven存储库呢?

什么是artifact?

在Java中,工件可以是软件开发过程中使用的任何类型的文件。其中最常见的是Java库,也称为“ JAR文件”。软件分发文件,软件包,文档包,机器学习模型以及您可以想到的任何其他类型的文件都可以成为Java世界中的工件。

Java程序中使用工件有许多不同的用途。在编译时使用JAR文件工件时,通常将其引入Java库代码,以便可以重复使用代码。

某些工件可能与软件打包在一起,直到运行时才使用。这些可以包括保存某种数据的工件:图像,机器学习模型,文档,语言包等。

TLDR:工件是Java程序使用的文件。对于自我执行的归档文件或其他类型的可执行Java文件,它们也可以是Java程序。

您将遇到的最常见的工件类型是依赖关系,即一个Java库。这使我们认识了您的新朋友(和我们的老朋友)Maven。


什么是Maven?

根据Maven主页:“ Apache Maven是一个软件项目管理和解析工具。”嗯?是的,对于刚刚起步的人来说,这还不是很清楚。让我们花点时间讨论一下。

没有Maven时Java的开发过程

假设您为Facebook的新应用程序启动了一个新项目。您打开编辑器并开始编写Java程序。您将要在代码中插入要将数据插入数据库的部分,因此有两种选择:

  • 研究数据库协议并编写直接与数据库会话的代码。
  • 查找已经实现数据库连接的库。

您会选择哪一个?如果您希望交付该新的应用程序,则最好使用库。为什么?因为编写数据库代码并非易事,并且甚至在获取实际应用程序代码之前都会消耗掉大部分精力。

软件工程101:“不要重新发明轮子”—即 找到一个可靠的库并使用它。Java之所以今天流行的原因之一是因为现有的大量库可供您今天使用。除了特定于应用程序的业务逻辑之外,您将需要的大多数实用程序代码已经编写并正在等待使用-您只需找到它!

好的,一旦找到包含所需代码的库(您如何做这可能是完全不同的文章),如何将其添加到程序中?在Java中,我们可以通过下载JAR文件并将其添加到Java类路径中来将库添加到程序中。如果您使用的是集成开发环境(IDE),则GUI会指导您。如果您正在使用基本的文本编辑器并使用命令行javac和java命令来运行程序,则需要在调用中添加-cp或-classpath参数。

如果只需要向类路径中添加一个库,那么可能就没什么大不了的,但是如果您正在使用的库需要另一个库(又需要另一个库,依此类推),那该怎么办。您可以很快进入所谓的Maven Dependency Hell,在那里您将必须下载并指定数十个(即使不是数百个)不同的库。这太疯狂了,太烂了,这是我们在开始使用Maven之前一直必须为所有项目做的所有事情。



开始使用maven

使用Maven,您不再直接操作类路径或下载jar。使用称为项目对象模型(POM)或POM文件的XML配置文件,您可以指定项目所需的依赖项,然后让Maven完成其余工作。当Maven运行时,它将查看声明的依赖项列表并下载所有依赖项,包括可能隐式需要的任何依赖项,也称为“传递性依赖项”。

一旦Maven完成,您就可以运行程序(使用Maven或通过IDE),并且您的类路径将包含Maven为您下载的所有Jar。它非常简单,相对简单(如果您可以克服XML的冗长性),并且已帮助许多开发团队以声明性,可重复的方式管理其依赖项(在过去,我们会检查版本控制的依赖项,是的!) 。

因此,这就是Maven….well,它是它最常用的功能之一。Maven还可以构建您的项目,捆绑您的应用程序,发布它,并通过多年来编写的各种插件来完成许多不同的工作。就像Java库一样,通常可以使用Maven插件来完成任何您想做的事情,而只需找到它即可!

如果您正在关注,您可能会想知道Maven从何处下载所有这些依赖项。好吧,答案很简单:Maven存储库。


什么是Maven存储库?

就像工件一样,Maven存储库可以用许多不同的名称来调用:Maven Artifact存储库,Maven软件包存储库,Maven软件包管理器,Maven存储库管理器,二进制存储库,这个清单不胜枚举!

Maven存储库是提供简单HTTP终结点的Web服务器,该终结点允许GET和PUT请求通过Maven本身发布和检索Maven工件。看起来似乎有点技术性,但是毕竟我们都是软件工程师,我们希望在2018年大家都熟悉HTTP。

Java以其丰富的开放源代码库而闻名,其中大多数库都可以通过Maven存储库获得。特别是,拥有世界上大部分开源工件的大型Maven存储库称为Maven中央存储库。

Maven默认配置为检查Maven中央存储库,因此您无需配置POM文件即可检索它们-只需声明您的开源依赖项,Maven命令行将处理其余工作!


什么是私有存储库?

我们已经介绍了Maven中央存储库,那里是Maven从中获取其公开可用的开源依赖项的地方,但是包含我们公司专有的私有代码的依赖项又如何呢?

这是Private Maven存储库的来源。

私有Maven信息库与其他Maven信息库一样,只是它们包含公司的私有信息。

通常,私有Maven存储库将实施访问控制,或将其隔离在内部网络上,以防止公司外部的人员访问私有工件。从历史上看,大多数私有Maven存储库都托管在公司的数据中心或防火墙中,但是随着一切都转移到云中,已经开发了基于云的新Maven存储库管理器。

私有Maven存储库不专门用于私有工件。希望向公众发布某些工件但希望保持对这些工件分布的控制的公司也可以使用它们

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps持续集成 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档