如何避免父项目中子目录库的重复

问题描述 投票:0回答:2

我有一个具有以下结构的多项目构建:

Root project 'just-another-root-project'
+--- Project ':producer'
\--- Project ':consumer'

settings.gradle文件:

rootProject.name = 'just-another-root-project'
include 'consumer', 'producer'

...连接创建的模块。


producer.gradle文件:

plugins {
    id 'java-library'
}

group 'com.github.yarbshk.jarp'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
    maven {
        url 'http://maven.nuiton.org/release/'
    }
}

dependencies {
    implementation 'com.sun:tools:1.7.0.13'
}

...有一个外部依赖(com.sun.tools),未在Maven Central中发布,因此我添加了一个指向Nuiton存储库的链接。


consumer.gradle文件:

plugins {
    id 'java'
}

group 'com.github.yarbshk.jarp'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    annotationProcessor project(':producer')
}

上面描述的构建不起作用!为了实现这一点,我被强制将所有存储库从producer.gradle复制到consumer.gradle。那么问题是如何在没有过多依赖重复的情况下构建根项目?如何以正确的方式做到这一点?谢谢你的回答或暗示:)


更新1:

尝试使用上面显示的文件构建项目时出现以下错误:

FAILURE: Build failed with an exception.

* What went wrong:
Could not resolve all files for configuration ':consumer:compile'.
> Could not find com.sun:tools:1.7.0.13.
  Searched in the following locations:
      https://repo.maven.apache.org/maven2/com/sun/tools/1.7.0.13/tools-1.7.0.13.pom
      https://repo.maven.apache.org/maven2/com/sun/tools/1.7.0.13/tools-1.7.0.13.jar
  Required by:
      project :consumer > project :producer
gradle repository multi-project
2个回答
1
投票

您可以直接在根项目中配置存储库,如下所示:

root项目build.gradle:

// configure repositories for all projects
allprojects {
    repositories {
        mavenCentral()
        maven {
            url 'http://maven.nuiton.org/release/'
        }
    }
}

编辑(来自你对其他回复的评论)

您还可以在根项目级别仅定义mavenCentral()存储库(它将添加到所有项目的存储库),并仅为生产者子项目配置http://maven.nuiton.org/release存储库:

根项目

repositories {
    // will apply to all project
    mavenCentral()
}

生产者项目

 repositories {
    maven {
        url 'http://maven.nuiton.org/release/'
    }
    // mavenCentral inherited from root project
}

消费者项目

// no need to re-define repositories here.

0
投票

官方gradle教程中有一节专门用于此:https://guides.gradle.org/creating-multi-project-builds/#configure_from_above

根项目可以配置所有项目:

allprojects {
    repositories {
        jcenter() 
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.