如何生成依赖项项目 jar 文件



我有两个maven java项目(比如项目A和项目B(。我已将项目 B 作为依赖项放置在项目 A 中,因为项目 A 需要项目 B 的某些服务。我喜欢下面pom.xml

<dependency>
    <groupId>com.projectB</groupId>
    <artifactId>api-projectB</artifactId>
    <version>1.1-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>

一切看起来都不错,但是当我为项目Amaven install时,我收到了以下警告

[WARNING] The POM for com.projectB:api-projectB:jar:1.1-SNAPSHOT is missing, no dependency information available

这会导致构建失败,并显示如下所示的消息

[ERROR] Failed to execute goal on project api-projectB: Could not resolve dependencies for project com.projectB:api-projectB:jar:1.1-SNAPSHOT: Could not find artifact com.projectB:api-projectB:jar:1.1-SNAPSHOT -> [Help 1]

如何在为项目 A 执行maven install时生成项目 B jar。我知道,如果我先为项目Bmaven install,然后再为项目Amaven install,一切都会好起来的。但是我想要以我不知道该怎么做的相反的方式

谁能帮我解决这个问题

Maven 仅从两个位置解析依赖项:

  1. 本地存储库(通常为 ~/.m2/repository (或
  2. 远程存储库,无论是公司内部还是像Maven Central这样的外部存储库。

(实际上,只有这两种类型的存储库。

[如果您正在使用 Eclipse,还有第三个选项,如果激活了相应的项目属性,则 M2Eclipse 插件可以在开发时解析工作区中的依赖关系。

因此,为了能够解析另一个项目中的依赖项,您必须至少对依赖项的项目执行以下操作一次:

  • mvn install(到本地存储库(,如果需要,只需在本地计算机上
  • mvn deploy(到远程存储库(,如果要与他人共享

要一步为所有项目执行此操作,您可以创建一个聚合器/多模块项目,例如:

+- aggregator
   +- pom.xml
   +- A
   |  +- pom.xml 
   +- B
   |  +- pom.xml 
   +- C
   |  +- pom.xml 
   +- ...
   |  +- pom.xml 
   ...

其中聚合器的 POM 包含:

  ...
  <packaging>pom</packaging>
  <modules>
    <module>A</module>
    <module>B</module>
    <module>C</module>
    <module>...</module>
  </modules>
  ...

并在此聚合器项目上执行mvn installmvn deploy

如果您不喜欢aggregator项目引入的额外目录级别,您可以在同一级别上创建它,并在其 POM 中使用 <module>../A</module> 等。

而且,顺便说一句,<scope>compile是默认值,因此您不必明确声明它。请记住:约定重于配置。;)

Maven说它找不到项目B的罐子。您需要先mvn install项目 B。

如果这些是有凝聚力的(即它们实际上是一个构建(,那么将它们放入一个具有Maven多模块构建的构建中,然后以正确的顺序处理正确的事情。

如果它们真的都是独立的,那么,正如有人提到的,它们应该保存在一个中央存储库(例如 Nexus、Artifactory 等(中,并使用 CI(例如 Jenkins(构建,这可以确保您的本地构建始终找到其依赖项的构建副本。

最新更新