为Gradle中的所有项目配置存储库

ttvkxqim  于 2023-02-23  发布在  其他
关注(0)|答案(2)|浏览(144)

我正在尝试为所有子项目配置存储库。
我有一个主要的build.gradle

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
        google()
        jcenter()
        ...
    }
    dependencies {
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

plugins {
    id 'base'
}

allprojects {
    apply plugin: 'base'

    repositories {
        mavenLocal()
        mavenCentral()
        google()
        jcentre()
        ...
    }

    wrapper{
        gradleVersion = '6.5.1'
        distributionType = Wrapper.DistributionType.ALL
    }

    dependencies {
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

在子项目build.gradle中,我只有:

...

dependencies {
    implementation ....
}

我得到:

Execution failed for task ':compileJava'.
> Could not resolve all files for configuration ':compileClasspath'.
   > Cannot resolve external dependency .... because no repositories are defined.
     Required by:
         project :

我想在主文件中定义一次repositories,因为它们在子项目中不会更改。
在主项目的settings.gradle中,我有:

rootProject.name = 'main-project-name'

include 'sub-project-name'

在子项目的settings.gradle中,我有:

rootProject.name = 'sub-project-name'
5vf7fwbs

5vf7fwbs1#

Gradle中的多项目构建可能包含多个build.gradle文件,但只有一个settings.gradle文件(通常位于根项目目录中)。您的第二个settings.gradle文件定义了仅包含单个项目的第二个设置。您可以通过运行gradle projects检查此情况。只需删除第二个settings.gradle文件即可解决问题。
通常你可以简单地定义你的子项目的名字,命名各自的目录,然后调用includerootProject的名字可以在settings.gradle中定义。因为目录名称通常不会存储在Git等版本控制系统中。开发人员可能会将存储库 checkout 到不同的目录,从而导致Gradle对根项目使用不同的名称。如果希望子项目的名称与其包含目录的名称不同,请使用include和所需的名称,然后通过project(':foo').projectDir = file('path/to/foo')更改项目目录。

ppcbkaq5

ppcbkaq52#

现代Gradle版本提供了一种推荐的集中声明依赖关系的方法。
TLDR:使用设置文件中的dependencyResolutionManagementDSL来配置所有子项目中的存储库。👇

dependencyResolutionManagement {
    repositories {
        mavenCentral()
    }
}

阅读更多文档:“集中存储库声明”。

相关问题