Gradle模块和git子模块

12

我有一个名为 toolkit 的库项目,其中包含两个模块 core 和 database,配置如下:

settings.gradle

include ':core'
include ':database' 

核心 build.gradle

dependencies {
    compile 'com.android.support:support-v4:20.+'
    compile 'com.jakewharton:butterknife:5.1.+'
    compile 'com.google.code.gson:gson:2.2.+'
    compile 'uk.co.chrisjenx:calligraphy:0.7.+'
    compile files('libs/flurry-3.4.0.jar')
}

数据库 build.gradle

dependencies {
    compile project(':core')
}

在这个库项目中运行我的测试是可以的,但我想将这个库作为git子模块添加到另一个项目中。这个项目有以下配置:
settings.gradle
include ':app-tablet'
include 'libraries:float-hint'
include 'libraries:toolkit:core'
include 'libraries:toolkit:database'
include 'libraries:twoway-view:TwoWayView'

应用程序 build.gradle

dependencies {
    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
    compile 'com.google.android.gms:play-services:+'
    compile 'com.j256.ormlite:ormlite-android:4.48'
    compile 'com.jayway.android.robotium:robotium-solo:5.2.1@jar'
    compile 'com.squareup.dagger:dagger:1.2.+'
    compile 'com.squareup.picasso:picasso:2.1.1@jar'
    compile files('libs/YouTubeAndroidPlayerApi.jar')
    compile project(':libraries:float-hint')
    compile project(':libraries:porquenao-toolkit:core')
    compile project(':libraries:porquenao-toolkit:database')
    compile project(':libraries:twoway-view:TwoWayView')
}

当我尝试编译时,我得到以下信息:

$  gradlew assembleDebug -d

12:10:46.283 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE: Build failed with an exception.
12:10:46.285 [ERROR] [org.gradle.BuildExceptionReporter] 
12:10:46.285 [ERROR] [org.gradle.BuildExceptionReporter] * Where:
12:10:46.285 [ERROR] [org.gradle.BuildExceptionReporter] Build file '/path/libraries/toolkit/database/build.gradle' line: 16
12:10:46.286 [ERROR] [org.gradle.BuildExceptionReporter] 
12:10:46.286 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong:
12:10:46.286 [ERROR] [org.gradle.BuildExceptionReporter] A problem occurred evaluating project ':libraries:toolkit:database'.
12:10:46.287 [ERROR] [org.gradle.BuildExceptionReporter] > Project with path ':core' could not be found in project ':libraries:toolkit:database'.
12:10:46.308 [ERROR] [org.gradle.BuildExceptionReporter]    ... more
12:10:46.308 [LIFECYCLE] [org.gradle.BuildResultLogger] 
12:10:46.308 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD FAILED

我知道问题涉及到路径 :corelibraries:toolkit:core,但应该如何适当地解决这个问题?

你的数据库构建应该包含编译project(':libraries:toolkit:core') - njzk2
@njzk2 不行,因为我想在将来的其他项目中使用这个工具包,而这些其他项目可能有不同于 libraries:toolkit 的路径... 另外,工具包上的 androidTest 需要使用 :core 找到核心。 - ademar111190
那么我认为你可能应该将core作为database的子模块包含进去? - njzk2
@njzk2 这个可能会起作用,'如果 Gradle 在处理应用程序使用的核心和数据库使用的核心时没有问题,则两个项目相等',但我真的想使用相同的 Git 存储库,因为这些项目实际上非常小,将来的想法是将其分成不同的项目,但今天不是。 - ademar111190
1个回答

8

您在应用的Gradle文件中存在命名问题。

settings.gradle文件包含以下内容:

include 'libraries:toolkit:core'

而build.gradle文件包含以下内容:

compile project(':libraries:porquenao-toolkit:core')

假设您修复了这个问题,您仍然会遇到一个错误。

数据库模块将尝试编译“:core”,但在应用程序中使用时,核心模块具有不同的路径:“:libraries:porquenao-toolkit:core”。

解决此问题的一种方法是在两个项目中都将核心库命名为“:core”,但给它不同的项目路径。

您的settings.gradle文件应如下所示:

Toolkit:

include ':core'
project(':core').projectDir = new File(rootDir, 'core')

应用程序:

include ':core'
project(':core').projectDir = new File(rootDir, 'libraries/porquenao-toolkit/core')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接