【问题标题】:Why are my nested maven dependencies not showing up when compiling为什么我的嵌套 maven 依赖项在编译时不显示
【发布时间】:2016-10-31 22:26:58
【问题描述】:

我有一个名为 my-library 的库,我用 Maven 打包并存储在私有 Nexus 存储库中。它编译并正确上传到我的仓库,并在其pom.xml 文件中指定了以下依赖项:

<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.7.13</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>3.1.0</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

我将此依赖项包含在另一个项目中,my-child-project,使用以下 pom.xml 块:

<repositories>
    <repository>
        <id>MyRepo</id>
        <name>My Maven Repository</name>
        <url>http://localhost:8081/nexus/repo</url>
    </repository>
</repositories>
...
<dependencies>
    <dependency>
        <groupId>com.my.group</groupId>
        <artifactId>my-library</artifactId>
        <scope>compile</scope>
        <version>1.0.0</version>
    </dependency>
</dependencies>

当我在 my-child-project 中运行 mvn clean install 时,maven 似乎能够找到并下载 my-library 但不是对 com.google.protobuf 的嵌套依赖,除非我将它明确包含在 my-child-projectpom.xml 中。我可以确认 Maven 在运行 mvn dependency:tree 时可以看到我的依赖项,但看不到嵌套的依赖项:

...
[INFO] +- org.springframework.data:spring-data-redis:jar:1.7.1.RELEASE:compile
[INFO] |  +- org.springframework.data:spring-data-keyvalue:jar:1.1.1.RELEASE:compile
[INFO] |  \- org.springframework:spring-oxm:jar:4.2.5.RELEASE:compile
[INFO] +- redis.clients:jedis:jar:2.8.1:compile
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] +- com.my.group:my-library:jar:1.0.0:compile
[INFO] +- com.fasterxml.jackson.core:jackson-annotations:jar:2.4.4:compile
...

这是嵌套库依赖项应该如何工作的方式吗?我认为其他依赖项中的嵌套依赖项由 Maven 在 compile 范围内自动解析和下载。我希望只列出 my-library 而不是 my-child-project 中的嵌套依赖项,但是好像不行。

【问题讨论】:

  • 您的子项目是否有对父项目的引用?
  • 尝试运行maven --debug clean install 看看它是否记录了一些有用的信息
  • @sirandy:是的,这是参考:com.my.groupmy-librarycompile1.0.0
  • @nandsito:使用mvn --debug clean install 没什么新意。它给了我同样的旧 Compilation failurepackage com.google.protobuf does not exist 错误,这表明我的嵌套依赖项没有找到。
  • 你的父项目pom有什么类型的包装?

标签: java maven


【解决方案1】:

首先,父 pom.xml 应该在 dependencies 标签之外添加dependencyManagement 标签。这只是为了在一个地方管理模块依赖关系,而不是真正将它们导入到您的项目中。

您仍然需要在子模块的 pom.xml 中声明它。 (但您可以省略版本标签,因为它将从父 pom 继承)

【讨论】:

    【解决方案2】:

    @herokingsley 的回答让我得到了正确的配置。我犹豫要不要尝试它,因为答案似乎表明我需要重新声明我孩子的嵌套依赖关系。当我最终尝试它时,我故意没有在 my-child-project 中声明嵌套依赖项,它仍然像魅力一样工作。这是解决我的问题的代码。我将 my-library 中的代码更改为以下内容:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>3.1.0</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.13</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    

    上面的改变就足够了,因为它在运行mvn dependency:tree时产生了以下输出:

    ...
    [INFO] +- org.springframework.data:spring-data-redis:jar:1.7.1.RELEASE:compile
    [INFO] |  +- org.springframework.data:spring-data-keyvalue:jar:1.1.1.RELEASE:compile
    [INFO] |  \- org.springframework:spring-oxm:jar:4.2.5.RELEASE:compile
    [INFO] +- redis.clients:jedis:jar:2.8.1:compile
    [INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided
    [INFO] +- com.my.group:my-library:jar:1.0.0:compile
    [INFO] |  \- com.google.protobuf:protobuf-java:jar:3.1.0:compile
    [INFO] +- com.fasterxml.jackson.core:jackson-annotations:jar:2.4.4:compile
    ...
    

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 2018-06-14
      • 2013-12-22
      相关资源
      最近更新 更多