【问题标题】:What is a Maven artifact?什么是 Maven 工件?
【发布时间】:2011-01-30 01:23:01
【问题描述】:

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

【问题讨论】:

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

标签: java build maven


【解决方案1】:

工件是部署到 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 会为新项目强制执行它。
【解决方案2】:

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

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

【讨论】:

  • 我的书说“这个在线应用程序的核心工件将是一个名为 User 的 Java 类,它将”... 这和你提到的工件一样吗?
  • @davidblaine - 不完全是,这句话使用了更一般的含义。
【解决方案3】:

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

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

正如其他评论者/响应者所说的那样,Maven 工件是通过构建 Maven 项目而产生的。这可能是一个.jar 文件,或者一个.war 文件,或者一个.zip 文件,或者一个.dll,或者你有什么。

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

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

把它们放在一起:

  • 您的 Maven 项目可能通过其 <dependency> 元素依赖于多个 Artifacts。
  • Maven 与存储库管理器交互,通过指示存储库管理器向其发送一些与内部 Artifacts 相对应的存储库管理器工件,将这些 Artifacts 解析为文件。
  • 最后,在解决之后,Maven 构建您的项目并生成一个 Maven 工件。您可以选择将其“变成”存储库管理器工件,依次使用您喜欢的任何工具,将其发送给存储库管理器,其中包含足够的协调信息,以便其他人在他们询问时可以找到它它的存储库管理器。

希望对您有所帮助。

【讨论】:

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

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 存档、本机库等。

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

【讨论】:

    【解决方案5】:

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

    • 组 ID(如 com.your.package),
    • 工件 ID(只是一个名称)和
    • 版本字符串。
      这三者共同唯一标识了工件。

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

    【讨论】:

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

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

    【讨论】:

      【解决方案7】:

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

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

      工件存在于存储库中。

      【讨论】:

        【解决方案8】:

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

        Group Id:项目组的标识 Artifact Id:项目的标识 快照版本:项目使用的版本。

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

        简单地说,Artifacts 只不过是包。

        【讨论】:

          【解决方案9】:

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-06-09
            • 2014-11-04
            • 2015-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多