【问题标题】:Gradle JavaExec task failing with library class not found error in Android StudioGradle JavaExec 任务失败,Android Studio 中未找到库类错误
【发布时间】:2014-10-08 15:04:15
【问题描述】:

我正在尝试将 ORMLite 数据“编译器”实用程序的运行集成到我的 android gradle 脚本中。从各种来源,我已经确定了如何将其放置在具有所需依赖项的构建流程中,以确保它在 java 编译后运行,第二个任务将使用 aapt 使用生成的数据库定义文件更新 apk。

我的主要问题是我的 OrmLiteConfigUtil 扩展类无法运行,因为 JavaExec 任务无法找到 OrmLiteConfigUtil 类

Error:Gradle: java.lang.ClassNotFoundException: com.j256.ormlite.android.apptools.OrmLiteConfigUtil

任务定义如下

applicationVariants.all { com.android.build.gradle.api.ApplicationVariant variant ->

    def databaseTaskName = "${variant.name.capitalize()}DatabaseCompile"
    def buildDir = getBuildDir()
    def javaCompileTaskName = "compile" + variant.name.capitalize() + "Java"
    def javaTask = project.tasks.findByName("${javaCompileTaskName}")

    task "${databaseTaskName}" (type: JavaExec) {
        main = 'com.barclaycard.bespoke.android.data.local.DatabaseConfigUtil'

        dependencies {
            classpath files("${buildDir}/intermediates/classes/${variant.dirName}")
        }
    }

    if (javaTask != null) {
        println "Adding post-compile hook to ${variant.name}"
        javaTask.finalizedBy "${variant.name.capitalize()}DatabaseCompile"
    }

}

并且被放置在 build.gradle 的 android 部分中

我尝试在任务的依赖项部分添加其他语句,但无济于事。

compile 'com.j256.ormlite:ormlite-android:4.48'

(任务执行过程中抛出ClassNotFoundException)

classpath 'com.j256.ormlite:ormlite-android:4.48'

classpath files('com.j256.ormlite:ormlite-android:4.48')

(无法将 URL 'com.j256.ormlite:ormlite-android:4.48' 转换为文件。)

我看不到如何让 JavaExec 任务使用远程存储库来查找所需的类。

compile 'com.j256.ormlite:ormlite-android:4.48'

在主项目依赖中使用,工作正常。

【问题讨论】:

    标签: gradle android-studio android-gradle-plugin ormlite


    【解决方案1】:

    这里可能对你有一点误解,但可能是你使用了错误的依赖项吗?可能这个合适吧

    dependencies {
        orm 'com.j256.ormlite:ormlite-android:4.48'
    }
    ...
    task "${databaseTaskName}" (type: JavaExec) {
        main = 'com.barclaycard.bespoke.android.data.local.DatabaseConfigUtil'
    
        classpath configurations.orm + files("${buildDir}/intermediates/classes/${variant.dirName}")
    
    ...
    }
    

    有点不确定那个“+”是否有效。 configurations.orm 我认为应该会产生影响。

    【讨论】:

    • 感谢您的指点 - 这种方法有效。就“+”而言,我只使用了两个classpath 语句。它们是累积的,每个classpath 语句都附加到类路径中。
    【解决方案2】:

    在我的情况下,它与错误设置的环境变量有关: 导出 LOCAL_LIB=D:\LIB 对比 导出 LOCAL_LIB="D:\LIB"

    所以,引号是问题所在。

    【讨论】:

      猜你喜欢
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 2014-12-31
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多