NoClassDefFoundError when trying to run DaoGenerator for GreenDAO

匿名 (未验证) 提交于 2019-12-03 00:50:01

问题:

I have an Android Project, using Android Studio 2.3, which uses GreenDAO to generate the classes to interact with the SQLite database. The DaoGenerator project always worked before... but today I just needed to add 2 columns/properties to an Entity and whenever I try to run the generator project, I get the following error:

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) 

I'm using GreenDAO 3.2.0 in my application's Gradle file:

compile 'org.greenrobot:greendao:3.2.0' 

Also, in DaoGenerator's Gradle file:

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

My ProjectDaoGenerator.java file:

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");     } } 

It's as if it couldn't find org.greenrobot.greendao.generator.Schema.

回答1:

Set the build.gradle file for your generator like this (especially note the mainClassName):

Then click the "Gradle" tab in the right sidebar of Android Studio and select the "run" task of your daogenerator like this:

It's worked for me , more details check link : https://github.com/greenrobot/greenDAO/issues/619 http://greenrobot.org/greendao/documentation/generator/#Triggering_generation



回答2:

Apart from what @Jesto Paul mentioned, I changed the following in the Generator class

new DaoGenerator().generateAll(schema, "./app/src/main/java"); - shows Path not exist.

to

new DaoGenerator().generateAll(schema, "../app/src/main/java");

(added double dot for the path). After doing this the generator create the tables to the folder.



回答3:

For some reason, I ran into the same problem after updating android buildToolsVersion.

After some time of searching, i've accidentally checked "Run > Edit Configurations..." for the DaoGenerator-Application.

In the list of JRE "Android API 25 Platform" was selected. So I changed it back to the external Java running on my computer (e.g. "1.8", did it before some days ago). That solved it for me.

Edit: in this project I use GreenDAO 2.1.0

Edit 2:

https://github.com/greenrobot/greenDAO/issues/619 - http://greenrobot.org/greendao/documentation/generator/#Triggering_generation



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!