0

我有以下项目包结构。

parent
|- module1
|- module2    
|- module3

我能够将 module3 作为依赖项包含在 module1 和 module2 的 pom.xml 文件中。这使我可以访问 module3 中的所有依赖项和代码。

<dependency>
    <groupId>my.group</groupId>
    <artifactId>module3</artifactId>
    <version>1.0.0</version>
</dependency>

但是,当我dependency:tree在 module1 或 module2 的 pom 文件上运行 maven 命令时,maven 将尝试搜索<servers>我的 settings.xml 文件中列出的某些内容,以便尝试下载 module3 作为工件。module3 目前没有部署到任何地方<server>,因此 maven 命令失败并出现以下错误

[ERROR] Failed to execute goal on project module1: Could not resolve dependencies for project my.group:module1:jar:1.0.0-SNAPSHOT: Failed to collect dependencies at my.group:module3:jar:1.0.0-SNAPSHOT: Failed to read artifact descriptor for my.group:module3:jar:1.0.0-SNAPSHOT: Could not transfer artifact my.group:module3:jar:1.0.0-SNAPSHOT from/to MyServer (https://example): Access Denied to: .......etc.

理想情况下,module3 根本不会被部署为工件,而是可能只是具有<packaging>pom</packaging>. module3 只是一些只能由 module1 和 module2 使用的模块。此外,仅供参考,module3 的依赖树构建得非常好。

4

3 回答 3

1
  1. 依赖项永远不应该是包装的pom。需要正确的 JAR 并且还需要部署到存储库。

  2. 通常,您在多模块项目的父级上运行构建命令。如果要将构建限制为一个模块,请使用-pl.

于 2021-06-04T07:33:35.547 回答
0

据我了解这个问题,以下 Maven 模块是同一个反应器的一部分:

parent
|- module1
|- module2    
|- module3

parent应该有:

<modules>
  <module>module1</module>
  <module>module2</module>
  <module>module3</module>
</modules>

否则,Maven 不会在文件系统中查找,而是在本地存储库中查找。

另外,据我了解,在您的示例中module1,并且module2是两个 jar 打包模块(例如:<packaging>jar</packaging>或省略),但 parent 和 module3 是两个 pom 打包模块(例如:)<packaging>pom</packaging>

我想您想创建某种只导入依赖项而不使用代码的模块,在这种情况下,您应该使用以下方法导入它:

<dependency>
    <groupId>my.group</groupId>
    <artifactId>module3</artifactId>
    <version>1.0.0</version>
    <type>pom</type>
</dependency>

尽管可能很奇怪,但这应该可以。

你也可以使用--offline强制maven上网。

于 2021-06-04T12:34:24.103 回答
0
  • 确保模块的版本是正确的。

通常,当您在父项目中运行“mvn clean install”时,将构建所有模块,顺序构建模块3->模块1和模块2。module3 总是首先构建。

谢谢

于 2021-06-04T05:25:08.730 回答