如何生成依赖工程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。我知道如果我先为 项目 B 做 maven install
然后为 项目 A 做 maven install
一切都会正常.但是我想要相反的方式,我不知道该怎么做
谁能帮我解决这个问题
Maven 说找不到项目 B 的 jar。您需要先 mvn install
projectB。
如果这些是有凝聚力的(即它们实际上是一个构建),那么将它们放入一个具有 Maven multi-module build 的构建中,然后它将按照正确的顺序做正确的事情。
如果它们真的都是独立的,那么正如有人提到的那样,它们应该保存在中央存储库中(例如 Nexus、Artifactory 等)并使用 CI(例如 Jenkins)构建,这可以确保您的本地构建总会找到它的依赖项的构建副本。
Maven 仅从两个地方解决依赖关系:
- 本地存储库(通常在
~/.m2/repository
)或
- 一个远程存储库,可以是贵公司内部的,也可以是外部的,例如 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 install
或 mvn deploy
。
如果您不喜欢 aggregator
项目引入的额外目录级别,您可以在同一级别创建它并在其 POM 中使用 <module>../A</module>
,依此类推。
而且,顺便说一句,<scope>compile
是默认值,因此您不必明确声明它。记住:Convention over configuration。 ;)
我有两个 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。我知道如果我先为 项目 B 做 maven install
然后为 项目 A 做 maven install
一切都会正常.但是我想要相反的方式,我不知道该怎么做
谁能帮我解决这个问题
Maven 说找不到项目 B 的 jar。您需要先 mvn install
projectB。
如果这些是有凝聚力的(即它们实际上是一个构建),那么将它们放入一个具有 Maven multi-module build 的构建中,然后它将按照正确的顺序做正确的事情。
如果它们真的都是独立的,那么正如有人提到的那样,它们应该保存在中央存储库中(例如 Nexus、Artifactory 等)并使用 CI(例如 Jenkins)构建,这可以确保您的本地构建总会找到它的依赖项的构建副本。
Maven 仅从两个地方解决依赖关系:
- 本地存储库(通常在
~/.m2/repository
)或 - 一个远程存储库,可以是贵公司内部的,也可以是外部的,例如 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 install
或 mvn deploy
。
如果您不喜欢 aggregator
项目引入的额外目录级别,您可以在同一级别创建它并在其 POM 中使用 <module>../A</module>
,依此类推。
而且,顺便说一句,<scope>compile
是默认值,因此您不必明确声明它。记住:Convention over configuration。 ;)