ChatGPT解决这个技术问题 Extra ChatGPT

什么是 Maven 工件?

什么是工件,为什么 Maven 需要它?

在此处了解有关 Maven 概念的更多信息:tshikatshikaaa.blogspot.nl/2012/05/…
顺便说一句,您可以查看官方 Apache Maven 词汇表以了解 Artifact 的定义
这些答案都不完整。您可以通过 browsing a Maven repository 看到这一点。工件显然是一个满足某些约束的目录,例如,它必须包含一个名为maven-metadata.xml 的文件和一个名为<artifactId>-<version>.pom 的文件。这两个文件都有一些未记录的架构和语义。

S
Stuart Sierra

工件是部署到 Maven 存储库的文件,通常是 JAR。

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

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

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


工件基本上是 JAR 文件吗?那么,joda time jar 文件可以称为 joda artifact,hibernate jar 可以称为 hibernate artifact 等等?
想想什么是神器。埃及人创造了精美的手工艺品,例如陶器。但是,如果你手里拿着一个埃及碗,你不会把它称为“神器”,除非你在讨论它是神器的事实(事实)。你会把它称为一个碗。他们从碗里吃东西。他们没有吃掉神器。
我认为@cbmeeks 的意思是“工件”不是“事物”的名称,它是构建过程中的一个角色。如果 Maven 产生任何东西并被赋予特殊的 Maven 坐标来识别它,那么任何东西都可以被归类为“工件”。
如果我有一个名为“com.example:mylibrary:1.0.0”(groupId:artifactId:version)的东西,它由一个 jar、一个 pom 和一个源 jar 组成,以下哪个是工件: 1. 每个文件(pom, jar, source jar) 是一个单独的工件; 2. 共享相同(groupId:artifactId:version)的文件集组成一个工件; 3. 还有什么?
groupId/artifactId 和类名之间不一定有任何关系。通常,groupId/artifactId 将匹配 Java 包。例如,一个名为 com.example.myproject.MyClass 的类可能在 groupId com.example 和 artifactId myproject 中找到,但这只是一个约定。 Maven 本身并不强制执行此约定。一些存储库 such as Maven Central 为新项目强制执行它。
K
Ken Liu

在一般软件术语中,“artifact”是软件开发过程产生的东西,无论是软件相关文档还是可执行文件。

在 Maven 术语中,工件是 Maven 构建的结果输出,通常是 jarwar 或其他可执行文件。 maven 中的工件由 groupId、artifactId 和 version 的坐标系标识。 Maven 使用 groupIdartifactIdversion 来识别构建和运行代码所需的依赖项(通常是其他 jar 文件)。


我的书说“这个在线应用程序的核心工件将是一个名为 User 的 Java 类,它将”... 这与您提到的工件相同吗?
@davidblaine - 不完全是,这句话使用了更一般的含义。
c
carlspring

我知道这是一个古老的线程,但我想添加一些细微差别。

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

Maven 工件就像其他评论者/响应者所说的那样:它是通过构建 Maven 项目吐出的东西。这可能是 .jar 文件、.war 文件、.zip 文件或 .dll,或者你有什么。

存储库管理器工件是由存储库管理器管理的东西。存储库管理器基本上是软件可执行文件和库的高性能命名服务。存储库管理器不关心其工件来自哪里(可能它们来自 Maven 构建、本地文件、Ant 构建或手动编译......)。

Maven Artifact 是一个 Java 类,它代表一种“名称”,它被存储库管理器取消引用到存储库管理器工件中。在这个意义上使用时,Artifact 只是由 groupIdartifactIdversionscopeclassifier 等部分组成的美化名称。

把它们放在一起:

您的 Maven 项目可能通过其 元素依赖于多个工件。

Maven 与存储库管理器交互以通过指示存储库管理器向其发送一些与内部工件相对应的存储库管理器工件来将这些工件解析为文件。

最后,在解决之后,Maven 会构建您的项目并生成一个 Maven 工件。您可以选择“把它变成”一个存储库管理器工件,反过来,使用您喜欢的任何工具,将其发送给存储库管理器,其中包含足够的协调信息,以便其他人在向存储库管理器请求它时可以找到它。

希望有帮助。


+1 获取有关旧线程的新信息,谢谢!修复拼写错误“repoository”虽然有时 poo 可能是正确的词哈哈......每个人都说“工件”是实际的 jar,可能有助于更新您的答案以指出使用时,例如,mvn install ,人们正试图弄清楚该条目中的内容。所以jar的全名就是-DartifactId=YOUR_ARTIFACT_ID要输入什么,对吗?带有版本和 .jar 的完整 jar 文件名?似乎是你在说什么,但会帮助一些人真正明确。其他答案接近这个,但我认为你的最好。
a
alex

Maven 组织其构建项目。

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

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-archives、native-libraries 等。

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


T
TofuBeer

Q. maven 中的 Artifact 是什么? ANS: ARTIFACT 是一个 JAR(WAR 或 EAR),但它也可能是其他东西。每个神器都有,

组 ID(如 com.your.package),

工件 ID(只是一个名称),以及

一个版本字符串。这三者共同唯一地标识了工件。

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


很好的答案,正如我在 other answer 上评论的那样,明确说明我们在运行 mvn install 时应该在 -DartifactId=YOUR_ARTIFACT_ID 中输入的内容,只是一个建议 :)
@JimLohse 谢谢,请随时添加“编辑”标题:)
d
duffymo

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


b
bmargulies

对于 Maven,构建过程被安排为一组工件。文物包括:

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

工件存在于存储库中。


V
Venky Vungarala

通常我们谈论关于 Group Id、Artifact Id 和 Snapshot Version 的 Maven 术语

Group Id:项目所属组的标识 Artifact Id:项目标识 Snapshot version:项目使用的版本。

Artifact 只不过是一些生成的文件,例如 Jar、War、Ear....

简单地说Artifacts不过是包。


t
tagus

通常,当您创建 Java 项目时,您希望使用其他 Java 项目中的功能。例如,如果您的项目想要发送一封电子邮件,您不需要为此创建所有必要的代码。您可以带一个完成大部分工作的 java 库。 Maven 是一个构建工具,可以帮助您完成多项任务。其中一项任务是以自动方式将这些外部依赖项或工件带到您的项目中(仅在 XML 文件中进行一些配置)。当然 Maven 有更多的细节,但是,对于你的问题,这就足够了。当然,Maven 也可以将您的项目构建为可以在其他项目中使用或导入的工件(通常是 jar 文件)。

这个网站有几篇关于 Maven 的文章:

https://connected2know.com/programming/what-is-maven/

https://connected2know.com/programming/maven-configuration/


F
Faseela Thayattuchira

什么是Artifact:它是一个war 文件,包含以下三个内容。

组 ID:类似于 com.yourCompanyName

神器ID:只是一个名字

版本:版本字符串。

这三者共同唯一地标识了工件。

Maven 习惯于使它们可用于我们的应用程序。包通常是 GroupId + ArtifactId