当它们包含我创建的工件时,如何指示 maven 自动添加依赖项 jar?

Posted

技术标签:

【中文标题】当它们包含我创建的工件时,如何指示 maven 自动添加依赖项 jar?【英文标题】:How to instruct maven to automatically add dependency jars when they include a artifact that i created? 【发布时间】:2012-11-29 01:16:28 【问题描述】:

我有使用 Maven 开发的可重用代码,结果工件是 JAR

现在要在另一个项目中使用它,我只需将这个依赖项添加到该项目的 POM.xml 中, 但 maven 不会自动检测并包含 jar 的依赖项。

我该怎么做呢?

感谢这方面的任何指针。

【问题讨论】:

请在发帖前尝试搜索您的问题的答案:***.com/search?q=maven+include+dependencies+in+jar 如果您已经尝试过上述结果中建议的操作,请说明您尝试了什么以及发生了什么,以便我们尝试并解决问题 如果您发现另一个问题可以回答您的问题,我建议将此问题作为重复问题关闭 Maven 应该自动执行此操作。当你构建你的第一个项目时,它应该将该项目的 jar 和 pom 放在你的本地 Maven 存储库中(默认为 ~/.m2/repository)。当您将 jar 添加为依赖项时,Maven 将读取 jar 和 pom 并从 pom.xml 中提取依赖项。您的本地存储库中有 jar 和 pom 吗?如果是这样,请发布您的第二个项目的 pom 文件。如果没有,请查看您的第一个项目。 如果有帮助,您至少可以接受下面的答案。 【参考方案1】:

您应该尝试构建具有依赖关系的已开发(可重用)代码。我不太确定这是否会有所帮助(我在构建依赖项时也遇到了一些问题),但我认为值得一试。 因此,您应该将其添加到 pom.xml(可重用项目的):

  <build>
  ...
     <plugins>
  ...
        <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jar-plugin</artifactId>
           <configuration>
              <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <mainClass>fully.qualified.MainClass</mainClass>
                </manifest>
              </archive>
           </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
              <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
            </configuration>
         </plugin>
    </plugins>
   </build>

详情请查看this question和maven-documenation

【讨论】:

问题是关于传递地解决自定义构建工件的依赖关系,而不是构建一个包含依赖关系的 jar。 据我了解,问题在于使用(可重用)创建的依赖项。我弄错了吗? :| 没有。但是你给出的说明是关于创建一个 uber-jar 的。包含 jar 本身内所有依赖项的单个 jar。问题是关于创建一个可在其他项目中使用的可重复使用的 jar。在其他项目中使用时,Maven 应该检索第一个 jar 的依赖项并使其在新项目中可用。然而,依赖项实际上并没有放在 jar 中。 @MalaKa OP 想在另一个 Maven 项目中使用 jar。 Maven 的重点是防止需要捆绑所有传递依赖。【参考方案2】:

我通过为我创建的 jar 手动添加 pom 文件解决了这个问题。

[文件结构]

GroupId 文件夹

ArtifactIdFolder

版本文件夹

ownjar.jar [我创建的工件] ownjar.pom [我手动创建的文件]

然后在 .pom 文件中放入依赖项。

<project>
    <dependencies>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>
    </dependencies>
</project>

【讨论】:

以上是关于当它们包含我创建的工件时,如何指示 maven 自动添加依赖项 jar?的主要内容,如果未能解决你的问题,请参考以下文章

创建发布版本后如何管理 Maven 依赖工件

Maven 发布插件失败:源工件被部署两次

Maven 中的项目工件到底是啥? [复制]

我自己的 Maven 插件如何获得 Maven 工件的可用版本?

Maven 程序集:添加同一工件的不同版本

在运行时获取 Maven 工件版本