android - 尝试为 GreenDAO 运行 DaoGenerator 时出现 NoClassDefFoundError

标签 android sqlite android-studio greendao

我有一个 Android 项目,使用 Android Studio 2.3,它使用 GreenDAO 生成与 SQLite 数据库交互的类。 DaoGenerator 项目以前一直有效...但今天我只需要向实体添加 2 列/属性,每当我尝试运行生成器项目时,我都会收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/greenrobot/greendao/generator/Schema
    at com.company.daogenerator.ProjectDaoGenerator.main(ProjectDaoGenerator.java:20)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ClassNotFoundException: org.greenrobot.greendao.generator.Schema
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

我在应用程序的 Gradle 文件中使用 GreenDAO 3.2.0:

compile 'org.greenrobot:greendao:3.2.0'

另外,在 DaoGenerator 的 Gradle 文件中:

apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'org.greenrobot:greendao-generator:3.2.0'
}

我的 ProjectDaoGenerator.java 文件:

package com.company.daogenerator;

import org.greenrobot.greendao.generator.DaoGenerator;
import org.greenrobot.greendao.generator.Entity;
import org.greenrobot.greendao.generator.Property;
import org.greenrobot.greendao.generator.Schema;

public class ProjectDaoGenerator {
    private static Entity primaryKeyEntity;
    private static Entity itemTypeEntity;

    public static void main(String args[]) throws Exception {
        Schema schema = new Schema(1, "com.company.project.datamodel");
        schema.enableKeepSectionsByDefault();

        // Define entities
        Entity primaryKey = schema.addEntity("CDPrimaryKey");
        Entity installation = schema.addEntity("CDInstallation");

        // Z_PRIMARYKEY
        primaryKeyEntity = primaryKey;
        primaryKey.setTableName("Z_PRIMARYKEY");
        primaryKey.addLongProperty("ENT").columnName("Z_ENT").primaryKey();
        primaryKey.addIntProperty("MAX").columnName("Z_MAX");
        primaryKey.addStringProperty("NAME").columnName("Z_NAME");
        primaryKey.addIntProperty("SUPER").columnName("Z_INT");

        // CDInstallation
        installation.setTableName("ZCDINSTALLATION");
        installation.addLongProperty("packageDate").columnName("ZPACKAGEDATE");

        (...) // Other Properties

        // **** Generate Schema ****
        new DaoGenerator().generateAll(schema, "app/src/main/java");
    }
}

就好像找不到org.greenrobot.greendao.generator.Schema

最佳答案

像这样为您的生成器设置 build.gradle 文件(特别注意 mainClassName):

enter image description here

然后单击 Android Studio 右侧栏中的“Gradle”选项卡,然后像这样选择您的 daogenerator 的“运行”任务:

enter image description here

它对我有用,更多细节检查链接:https://github.com/greenrobot/greenDAO/issues/619 http://greenrobot.org/greendao/documentation/generator/#Triggering_generation

关于android - 尝试为 GreenDAO 运行 DaoGenerator 时出现 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42843031/

相关文章:

SQLite 查询插入记录如果不存在

java - 使用 Eclipse (Java) 连接到 SQLite 数据库

android - Git - Android Studio 没有直观地显示任何分支

java - 如何在我变暗的图层上方显示一个 block

android - Android Studio 中的 NDK 集成

java - 安卓。 CPU 使用率过高

android - 创建NotificationChannel会抛出IllegalArgumentException

android - 你能以编程方式更改 android 键盘文本字体吗?

Android:后台服务中的计时器

multithreading - SQLite3 中表的线程安全和并发修改