首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Gradle子项目依赖项不能由需要它的项目解析

Gradle子项目依赖项不能由需要它的项目解析
EN

Stack Overflow用户
提问于 2019-07-17 10:17:49
回答 1查看 369关注 0票数 0

我有以下项目结构:

代码语言:javascript
复制
example
├── build.gradle
├── module1
│   ├── build.gradle
│   └── main
│       ├── java
│       │   ├── module-info.java
│       │   └── com.example.module1
│       │       └── Example.java
│       └── resources
│           └── application.yml
└── module2
    ├── build.gradle
    ├── main
    │   ├── java
    │   │   ├── module-info.java
    │   │   └── com.example.module2
    │   │       └── Example2.java
    └── test

module1 build.gradle

代码语言:javascript
复制
repositories {
    maven {
        url 'http://download.osgeo.org/webdav/geotools/'
        name 'Open Source Geospatial Foundation Repository'
    }

    maven {
        url 'https://repo.boundlessgeo.com/main/'
        name 'Boundless Maven Repository'
    }

    maven {
        url 'http://repo.boundlessgeo.com/snapshot'
        name 'Geotools SNAPSHOT repository'
        mavenContent {
            snapshotsOnly()
        }
    }

    mavenCentral()
    jcenter()
}

dependencies {
    implementation "org.geotools:gt-main:$geotoolsVersion"
}

module2 build.gradle (依赖于module1)

代码语言:javascript
复制
repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    implementation project(':module1')
}

问题是,在解析module2的依赖关系时,它无法找到module1的传递依赖关系,因此我得到了以下错误:

代码语言:javascript
复制
FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':module2'.
> Could not resolve all files for configuration ':module2:runtimeClasspath'.
   > Could not find org.geotools:gt-main:21.2.
     Searched in the following locations:
       - https://repo.maven.apache.org/maven2/org/geotools/gt-main/21.2/gt-main-21.2.pom
       - https://repo.maven.apache.org/maven2/org/geotools/gt-main/21.2/gt-main-21.2.jar
       - https://jcenter.bintray.com/org/geotools/gt-main/21.2/gt-main-21.2.pom
       - https://jcenter.bintray.com/org/geotools/gt-main/21.2/gt-main-21.2.jar
     Required by:
         project :module2 > project :module1

看起来它只是使用在module1中声明的存储库来搜索module2的传递deps,而不是在module1中。

有趣的是,如果我将module2中的依赖项更改为:

代码语言:javascript
复制
dependencies {
    compileClasspath project(':module1')
}

依赖关系已解决。但是,这意味着在运行时,module1不是类路径的一部分,因此运行应用程序仍然会失败。

我该如何解决这个问题呢?

EN

Stack Overflow用户

回答已采纳

发布于 2019-07-17 16:00:44

问题是,项目依赖关系在依赖时不会泄漏它们的存储库位置。

修复方法是将存储库移动到根build.gradle中。类似于:

代码语言:javascript
复制
subprojects {
  repositories {
    //https://docs.geotools.org/latest/userguide/build/maven/repositories.html
    maven {
      url 'http://download.osgeo.org/webdav/geotools/'
      name 'Open Source Geospatial Foundation Repository'
    }

    maven {
      url 'https://repo.boundlessgeo.com/main/'
      name 'Boundless Maven Repository'
    }
  }
}

请参阅以下github问题:

https://github.com/gradle/gradle/issues/4106

https://github.com/gradle/gradle/issues/8811

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57067670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档