什么是Maven工件?


342

什么是人工制品,为什么Maven需要它?



1
顺便说一句,您可以看到有关工件
informatik01

1
这些答案均不完整。您只需浏览Maven存储库即可看到此信息。工件显然是满足某些约束的目录,例如,它必须包含名为maven-metadata.xml和的文件<artifactId>-<version>.pom。这些文件都具有一些未记录的架构和语义。
jameshfisher 2014年

Answers:


303

工件是一个文件,通常是一个JAR文件,已被部署到Maven存储库。

Maven构建会生成一个或多个工件,例如已编译的JAR和“源” JAR。

每个工件都有一个组ID(通常是一个反向域名,例如com.example.foo),一个工件ID(只是一个名称)和一个版本字符串。这三个一起唯一地识别工件。

项目的依赖关系被指定为工件。


5
工件基本上是JAR文件吗?因此,joda时间jar文件可以称为joda工件,休眠jar可以称为休眠工件等?
david blaine

47
想一想什么才是真正的神器。埃及人创造了陶器等奇妙的文物。但是,如果您手里拿着埃及碗,除非您正在讨论它是一种人工制品(事实),否则您不会将其称为“人工制品”。您将其称为碗。他们从碗里吃了。他们没有吃掉文物。
cbmeeks 2014年

3
我认为@cbmeeks的意思是“工件”不是“事物”的名称,它是构建过程中的角色。如果Maven生产了任何东西,并且将其赋予特殊的Maven 坐标以进行识别,那么任何东西都可以归类为“工件” 。
Garret Wilson

如果我有一个名为“ com.example:mylibrary:1.0.0”(groupId:artifactId:version)的文件,它由一个jar,一个pom和一个源jar组成,以下是工件:1.每个文件(pom,jar,源jar)是一个单独的工件;2.共享相同文件的组(groupId:artifactId:version)组成一个工件;3.还有什么?
劳伦斯·贡萨尔维斯(Lawrence Gonsalves),

给定类的名称,您无需解释如何获取groupid和artifactid。Downvote
Philip Rego

114

用一般的软件术语来说,“ 工件 ”是由软件开发过程产生的,无论是与软件有关的文档还是可执行文件。

在Maven的术语中,工件是所得的行家构建的输出,通常是jarwar或其他可执行文件。Maven中的工件由groupId,artifactId和version的坐标系标识。Maven使用groupIdartifactId以及version找出需要建立依赖关系(通常是其他jar文件),并运行代码。


我的书说:“此在线应用程序的核心工件将是一个名为User的Java类,它将……”这与您提到的工件相同吗?
david blaine

@davidblaine-不完全是,该句子使用了更一般的含义。
刘坚

27

我知道这是一个古老的话题,但我想补充一些细微之处。

有Maven工件,存储库管理器工件,然后还有Maven Artifact

就像其他评论者/响应者所说的那样,Maven工件:通过构建Maven项目可以解决这个问题。那可能是一个.jar文件,或者一个文件,或者一个.war文件,或者一个.zip文件,或者.dll您拥有什么。

存储库管理器工件是由存储库管理器很好地管理的东西。基本上,存储库管理器是针对软件可执行文件和库的高性能命名服务。存储库管理器不在乎其工件来自何处(也许它们来自Maven构建,本地文件,Ant构建或手动编译...)。

Maven Artifact是Java类,它表示“名称”的类型,该名称由存储库管理器解引用到存储库管理器工件中。当在这个意义上使用的,Artifact就是这样的部件作为由一个荣耀的名字groupIdartifactIdversionscopeclassifier等。

放在一起:

  • 您的Maven项目可能Artifact通过其<dependency>元素依赖于多个。
  • Maven Artifact通过指示存储库管理器向其发送一些与内部Artifacts 相对应的存储库管理器工件,与存储库管理器进行交互以将这些s 解析为文件。
  • 最后,在解决之后,Maven会构建您的项目并生成一个Maven工件。您可以选择“把它变成”由仓库管理器神器,反过来,用你喜欢的任何工具,它有足够的协调信息,其他人可以找到它,当发送到存储库管理,他们要求仓库管理它。

希望能有所帮助。


+1获取有关旧主题的新信息,谢谢!修正拼写错误“ repoository”,尽管有时poo可能是正确的单词haha ...每个人都在说“ artifact”是实际的jar,可能有助于更新您的答案以指出例如在使用时mvn install,人们会试图弄清楚该条目中要放什么。所以罐子的全名是输入什么-DartifactId=YOUR_ARTIFACT_ID,对吗?带有版本和.jar的完整jar文件名?似乎就是您在说的内容,但实际上可以帮助一些人。其他答案与此差不多,但我认为是您最好的。
JimLohse

23

Maven在项目中组织其构建。

一个artifact在Maven是由Maven项目生成的资源。每个maven项目都可以有一个artifact类似 的项目jar, war, ear,等等
。项目的配置文件"pom.xml"描述了构件的构建方式,单元测试的运行方式等。通常,使用maven构建的软件项目由许多构建构件的maven项目组成(例如jars)。 )构成产品。
例如

Root-Project   // produces no artifact, simply triggers the build of the other projects
  App-Project  // The application, that uses the libraries
  Lib1-Project // A project that creates a library (jar)
  Lib2-Project // Another library
  Doc-Project  // A project that generates the user documentation from some resources

Maven工件不限于Java资源。您可以生成所需的任何资源。例如文档,项目站点,zip归档文件,本机库等。

每个Maven项目的唯一标识符为[groupId, artifactId, version]。当一个maven项目需要另一个项目的资源时,将pom.xml使用上述标识符在其中配置依赖项。然后,当触发构建时,Maven自动解决依赖关系。然后,可以从本地repository(它是用户家中的简单目录)或您中指定的其他(远程)存储库中加载所需项目的工件pom.xml


19

问:什么是Maven中的工件?
ANS:ARTIFACT是JAR(WAR或EAR),但也可能是其他东西。每个工件都有

  • 组ID(例如com.your.package),
  • 工件ID(仅是名称),以及
  • 版本字符串。
    这三个一起唯一地识别工件。

问:为什么Maven需要它们?
回答:Maven用于使它们可用于我们的应用程序。


不错的答案,正如我对其他答案所做的评论一样,它明确了我们-DartifactId=YOUR_ARTIFACT_ID在运行mvn install时应该输入的内容,只是一个建议:)
JimLohse16年

@JimLohse谢谢,请随时添加“编辑”标题:)
VdeX

9

工件是JAR或您存储在资源库中的东西。Maven将它们发布并构建您的代码。


8

为了行事,将构建过程安排为一组工件。工件包括:

  1. 组成Maven本身的插件。
  2. 您的代码所依赖的依赖项。
  3. 您的构建产生的任何东西都可以被其他东西消耗。

工件存放在存储库中。


4

通常我们谈论有关组ID,工件ID和快照版本的Maven术语

组ID:项目组的标识工件ID:项目的标识快照版本:项目使用的版本。

工件不过是诸如Jar,War,Ear ...之类的生成文件。

简单地说,工件不过是包装。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.