Сбой задачи Gradle JavaExec из-за ошибки класса библиотеки в Android Studio

Я пытаюсь интегрировать запуск утилиты компилятора данных ORMLite в мой скрипт Android Gradle. Из различных источников я установил, как поместить его в поток сборки с необходимыми зависимостями, чтобы убедиться, что он запускается после компиляции java, а вторая задача обновит apk с помощью сгенерированного файла определений базы данных с помощью aapt.

Моя основная проблема заключается в том, что я не могу запустить расширенный класс 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"
    }

}

и находится внутри раздела android в build.gradle.

Я попытался добавить дополнительные операторы в раздел зависимостей задачи, но безрезультатно.

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'

используется в основных зависимостях проекта и отлично работает.


person drew    schedule 08.10.2014    source источник


Ответы (2)


Возможно, вы немного неправильно меня поняли, но может быть вы неправильно используете зависимости? Может быть, это подходит

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 Я думаю, это должно оказать влияние.

person judoole    schedule 08.10.2014
comment
Спасибо за указатель - этот подход сработал. Что касается «+», я просто использовал два оператора classpath. Они являются кумулятивными, каждый оператор classpath добавляется к пути к классу. - person drew; 29.10.2014

В моем случае это связано с неправильно установленной переменной среды: export LOCAL_LIB=D:\LIB vs export LOCAL_LIB="D:\LIB"

Итак, кавычки были проблемой.

person hani ald    schedule 05.01.2015