我是gradle的新手,还在努力理解它,所以如果你给予答案,请假设我不知道我在说什么。:)我使用的是gradle 7.3.3。
我有一个Android应用程序项目,它有标准的app
模块。在我的app
模块中有一个名为com.inadaydevelopment.herdboss.DatabaseConfigUtil
的类,我希望能够运行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.声明项目依赖关系,看起来我做得很对。
如果我更改依赖项以删除单词“implementation”,gradle配置不会抛出错误,但我完全不理解,因为它没有将依赖项附加到配置(如“implementation”)。
dependencies {
project(":app")
}
当我这样做时,gradle任务将启动,但最终会失败,因为app
模块中的类不在类路径中,因此它无法找到要运行的类:
> 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课程,我认为我对它有了更好的理解,但是我认为我理解的一些基本东西并不起作用。
3条答案
按热度按时间2cmtqfgy1#
模块
:app
应配置自身;最好使用buildSrc
或includeBuild
。从一个库模块而不是另一个库模块访问任何东西都是一种反模式。如果你真的必须以一种奇怪的方式配置数据库,那么就在:app
模块上应用一个自定义插件。我只是不明白为什么这个问题被标记为android
,它读的是id 'java'
而不是id 'com.android.library'
?例如,添加
buildSrc/build.gradle
:这样Gradle就可以在构建时执行Java代码:
并可应用于
:app
build.gradle
模块中:否则,您必须坚持使用Groovy或Kotlin脚本。
kokeuurv2#
如果您尚未这样做,则需要将子项目包含在您的settings.gradle中,如下所示:
您引用的示例适用于Gradle 7.4.2。也许可以看看这个适用于7.3.3的示例。
des4xlb03#
最后,我能够以一种不同的方式运行我的
main()
方法和我的所有Android项目依赖项,我在Android Studio, generate Ormlite Configuration File (ormlite.txt), gradle complains "The JavaExec.main property has been deprecated."中详细描述了这种方式