[英]gradle cannot resolve dependecy project(":app") from other sub-project
我是 gradle 的新手,仍然試圖理解它,所以如果你給出答案,請假設我不知道我在說什么。:) 我使用的是 gradle 7.3.3。
我有一個具有標准app
模塊的 Android 應用程序項目。 在我的app
模塊中是一個名為com.inadaydevelopment.herdboss.DatabaseConfigUtil
的 class ,我希望能夠運行DatabaseConfigUtil.main()
並且它需要在類路徑中包含來自app
的所有類。
我創建了第二個名為libdbconfig
的模塊,它只是一個 Java 庫模塊,這樣我就可以創建一個 JavaExec 任務,該任務將調用DatabaseConfigUtil.main()
並確保app
中的所有類都在類路徑中。
我的libdbconfig/build.gradle
文件如下所示:
plugins {
id 'java'
}
dependencies {
implementation project(":app")
}
task dbconfig(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
mainClass = "com.inadaydevelopment.herdboss.DatabaseConfigUtil"
}
我將 AndroidStudio 與我的 build.gradle 更改同步,然后嘗試運行libdbconfig:dbconfig
任務並得到錯誤:
* What went wrong:
Could not determine the dependencies of task ':libdbconfig:dbconfig'.
> Could not resolve all task dependencies for configuration ':libdbconfig:runtimeClasspath'.
> Could not resolve project :app.
我以為我了解如何聲明對另一個子項目的依賴關系,並且每當我查看示例時( 示例 11.Declaring project dependencies看起來我做對了。
如果我更改我的依賴項以刪除“實施”一詞,那么 gradle 配置不會引發錯誤,但我根本不明白,因為它沒有將依賴項附加到配置(如“實施”)。
dependencies {
project(":app")
}
當我這樣做時,gradle 任務將啟動,但最終會失敗,因為來自app
模塊的類不在類路徑中,因此它找不到要運行的 class:
> Task :libdbconfig:dbconfig FAILED
Error: Could not find or load main class com.inadaydevelopment.herdboss.DatabaseConfigUtil
Caused by: java.lang.ClassNotFoundException: com.inadaydevelopment.herdboss.DatabaseConfigUtil
任何幫助表示贊賞。 gradle 對我來說是巫術很長時間了,我正在努力弄清楚。 我參加了一個關於如何使用它的 udacity 課程,我認為我對它有了更好的理解,但是我認為我理解的一些基本內容不起作用。
如果您還沒有這樣做,您需要在settings.gradle中包含您的子項目,如下所示:
include "app"
include "libdbconfig"
您引用的示例適用於 Gradle 7.4.2。 也許看看這個例子 7.3.3 。
模塊:app
應該自行配置; 更好地使用buildSrc
或includeBuild
。 從庫模塊訪問任何其他內容而不是另一個庫是一種反模式。 如果您真的必須以一種奇怪的方式配置數據庫,請將自定義插件應用到:app
模塊。 而且我只是不明白為什么這個問題被標記為android
,它讀取id 'java'
而不是id 'com.android.library'
?
例如,添加buildSrc/build.gradle
:
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:7.2.1'
}
repositories {
mavenCentral()
google()
}
}
apply plugin: 'org.gradle.java-gradle-plugin'
allprojects {
repositories {
mavenCentral()
google()
}
}
gradlePlugin {
plugins {
DbConfigPlugin {
id = 'com.inadaydevelopment.herdboss.dbconfig'
implementationClass = 'com.inadaydevelopment.herdboss.DbConfigPlugin'
}
}
}
dependencies {
implementation gradleApi()
implementation 'com.android.tools.build:gradle-api:7.2.1'
testImplementation gradleTestKit()
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2'
}
tasks.withType(Test).configureEach {
useJUnitPlatform()
}
那么Gradle可以在構建時執行Java代碼:
class DbConfigPlugin implements Plugin<Project> {
@Override
public void apply(@NotNull Project project) {
/* TODO: configure the database. */
}
}
它可以應用在模塊中:app
build.gradle
:
plugins {
id 'com.android.application'
id 'com.inadaydevelopment.herdboss.dbconfig'
}
否則,您必須堅持使用 Groovy 或 Kotlin 腳本。
我無法得到馬丁的答案,但我會給他賞金,因為他付出了很多努力來試圖給出一個好的答案。
最后,我能夠以不同的方式運行我的所有 android 項目依賴項的 main() 方法的方式,我在Android Studio 中詳細描述過,生成 Ormlite 配置文件 (ormlite.txt),Z8ED1A771BC236C27ZAD9 “JavaExec.main 屬性已被棄用。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.