【问题标题】:gradle - project as a dependencygradle - 项目作为依赖项
【发布时间】:2018-08-12 11:45:57
【问题描述】:

我有一个Java项目结构如下:

- root-directory (has no .gradle file)
    - project_1
        - build.gradle
        - settings.gradle
    - project_2
        - build.gradle
        - settings.gradle
    - project_3
        - build.gradle
        - settings.gradle

project_2依赖project_1,这个依赖定义如下:

- project_2/build.gradle
  implementation(project(":project_1"))
- project_2/settings.gradle
  include(":project_1")
  project(":project_1").projectDir = new File("../project_1")

并且,project_3 依赖于project_2,这个依赖定义如下:

- project_3/build.gradle
  implementation(project(":project_2"))
- project_3/settings.gradle
  include(":project_2")
  project(":project_2").projectDir = new File("../project_2")

现在,当我通过在./project_3/ 目录中运行>> ./gradlew build 终端命令来构建project_3 时,会出现以下错误:

A problem occurred evaluating project ':project_2'.
> Project with path ':project_1' could not be found in project ':project_2'.

我希望能够从它自己的目录构建每个项目。我该如何解决这个问题?

更新:我尝试通过添加以下内容将root-directory 转换为项目根目录:

- root-directory/settings.gradle
  rootProject.name = "root"
  include(":project_1", ":project_2", ":project_3")
- root-directory/build.gradle
  // Nothing in this file

并从所有子项目的settings.gradle 文件中删除了project(":project_#").projectDir = new File("../project_#") 行。但即使在此之后,来自每个单独项目目录的构建命令也不起作用。

【问题讨论】:

  • 必须有一个根项目,因此只有一个settings.gradle文件,所有命令必须从根目录执行。例如 = ./gradlew build 构建所有项目,或 ./gradlew :project_1:build 仅构建 project_1。 docs.gradle.org/current/userguide/multi_project_builds.html
  • @JBNizet 谢谢,成功了。
  • 快速更正:命令不必从根项目执行。您应该能够从任何项目目录运行gradle build。如果你正在使用它,你只需要调整包装脚本的路径。

标签: java gradle


【解决方案1】:

不要在模块级build gradle中定义include(":project_1/2/3"),而是使用根项目的settings.gradle来定义这个...

include ":project_1", ":project_2", ":project_3"
rootProject.name = "SomeApp"

然后你可以在模块级build.gradle中引用这些子项目:

dependencies {
     api project(':project_1')
     implementation project(':project_2')
}

【讨论】:

    【解决方案2】:

    项目依赖项需要项目路径,而不仅仅是项目名称:

    dependencies {
        implementation project(":project_1")
    }
    

    注意项目名称前的::它将项目名称转换为相对于根项目的项目路径。

    【讨论】:

    • 感谢您的建议,但这就是我编写构建脚本的方式(这是语法)。但是我在写问题时错过了它。我已经更新了问题。
    【解决方案3】:

    就我而言,我的子项目不是 java 项目。我不得不这样做

    allprojects {
       apply plugin: 'java'
    }
    

    在 build.gradle 中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      相关资源
      最近更新 更多