NoClassDefFoundError when trying to run DaoGenerator for GreenDAO

I have an Android project using Android Studio 2.3 that uses GreenDAO to create classes for interacting with a SQLite database. The DaoGenerator project has always worked before ... but today I just needed to add 2 columns / properties to Entity, and whenever I try to start 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 am using GreenDAO 3.2.0 in my Gradle file application:

 compile 'org.greenrobot:greendao:3.2.0' 

Also in the DaoGenerator 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"); } } 

As if he could not find org.greenrobot.greendao.generator.Schema .

+5
source share
3 answers

Set the build.gradle file for your generator (especially pay attention to mainClassName ):

enter image description here

Then click the “Gradle” tab in the right sidebar of Android Studio and select the “launch” task of your daogenerator as follows:

enter image description here

This worked for me, a more detailed verification link: https://github.com/greenrobot/greenDAO/issues/619 http://greenrobot.org/greendao/documentation/generator/#Triggering_generation

+12
source

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

After some time searching, I accidentally checked "Run> Change Configurations ..." for the DaoGenerator application.

In the JRE list, "Android API 25 Platform" was selected. Therefore, I transferred it back to external Java running on my computer (for example, "1.8" , did it before a few days ago). This solved it for me.

Edit: in this project I am using GreenDAO 2.1.0

Edit 2:

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

+1
source

Besides what @Jesto Paul said, I changed the following in the Generator class

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

to

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

(added double point for the path). After that, the generator creates tables in the folder.

+1
source

Source: https://habr.com/ru/post/1265575/


All Articles