Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
子项目依赖项与Gradle失败_Gradle_Dependency Management_Multi Module_Multi Project - Fatal编程技术网

子项目依赖项与Gradle失败

子项目依赖项与Gradle失败,gradle,dependency-management,multi-module,multi-project,Gradle,Dependency Management,Multi Module,Multi Project,我正在努力处理Gradle和以下项目结构的构建配置(非常简单…): projC使用projB中的类 在projA/settings.gradle中: include 'projB' include 'projC' 在projC/build.gradle中: dependencies{ compile project(':projB') } 在IntelliJ中,我没有依赖项解析的问题,但是当我在projA中运行./gradlew构建时,我面临一个编译错误: ClassC: Unresolv

我正在努力处理Gradle和以下项目结构的构建配置(非常简单…):

projC使用projB中的类

在projA/settings.gradle中:

include 'projB'
include 'projC'
在projC/build.gradle中:

dependencies{
 compile project(':projB')
}
在IntelliJ中,我没有依赖项解析的问题,但是当我在projA中运行./gradlew构建时,我面临一个编译错误:

ClassC: Unresolved reference: ClassB
(其中ClassC是projC的类,它在使用ClassB时失败,而ClassB显然是projB的一个类…)

请注意,代码是用Kotlin语言编写的,在IntelliJ(spring boot run)中运行应用程序没有任何问题,但是任何使用Gradle的构建都会给我一个错误(IntelliJ和命令行中都有)

我错过了什么

问候,,
Adrien

为您的
rootProject
添加一个顶级目录是一个常见的Gradle习惯用法。这是一个特殊的项目,它是构建中所有其他项目的父项目

这就是您的
设置.gradle
文件的位置:

include ':projA:projB'
include ':projA:projC'
然后,我建议将projA作为根项目的子目录,这样您的层次结构将如下所示:

/myProject
  settings.gradle
  /projA
    build.gradle
    /projB
      build.gradle
    /projC
      build.gradle
另外,在
projC/build.gradle
中,您需要:

dependencies {
  compile project(':projA:projB')
}

应该可以了。

谢谢Felipe,我的第一个项目层次结构(projA是projB和projC的父级),
编译项目(“:projB”)
我的projC上的in build.gradle不会做这项工作吗?既然projA已经是作为父项目的顶级项目,为什么我需要添加一个额外的顶级项目?AFAIK Gradle希望您提供项目依赖项的“完整路径”,这就是为什么您需要
“:projA:projB”
,将其视为目录的相对路径。
dependencies {
  compile project(':projA:projB')
}