如何生成依赖工程jar文件

How to generate dependency project jar file

我有两个 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>

一切看起来都不错,但是当我为 项目 A 执行 maven 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 说找不到项目 B 的 jar。您需要先 mvn install projectB。

如果这些是有凝聚力的(即它们实际上是一个构建),那么将它们放入一个具有 Maven multi-module build 的构建中,然后它将按照正确的顺序做正确的事情。

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

Maven 仅从两个地方解决依赖关系:

  1. 本地存储库(通常在~/.m2/repository)或
  2. 一个远程存储库,可以是贵公司内部的,也可以是外部的,例如 Maven Central

(其实是there are just these two types of repositories。)

[如果您使用的是 Eclipse,则还有第三个选项,其中 M2Eclipse plugin 可以在根据项目 属性 激活的情况下在开发时从工作区解析依赖项。]

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

  • mvn install(到本地仓库),如果需要就在你的本地机器上
  • mvn deploy(到远程repo),如果要分享给他人

要一步完成所有项目,您可以创建一个 aggregator / multi-module 项目,例如:

+- 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 是默认值,因此您不必明确声明它。记住:Convention over configuration。 ;)