尝试 运行 GreenDAO 的 DaoGenerator 时出现 NoClassDefFoundError
NoClassDefFoundError when trying to run DaoGenerator for GreenDAO
我有一个 Android 项目,使用 Android Studio 2.3,它使用 GreenDAO 生成 类 与 SQLite 数据库交互。 DaoGenerator 项目以前一直有效...但今天我只需要将 2 columns/properties 添加到一个实体,每当我尝试 运行 生成器项目时,我都会收到以下错误:
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
.
出于某种原因,我 运行 在更新 android buildToolsVersion 后遇到了同样的问题。
经过一段时间的搜索,我不小心检查了 "Run > Edit Configurations..." DaoGenerator-Application。
在 JRE 列表中选择了 "Android API 25 Platform"。所以我在我的电脑上把它改回了外部 Java 运行(例如 "1.8",几天前就做过)。这为我解决了。
编辑:在这个项目中我使用 GreenDAO 2.1.0
编辑 2:
https://github.com/greenrobot/greenDAO/issues/619
- http://greenrobot.org/greendao/documentation/generator/#Triggering_generation
像这样为您的生成器设置 build.gradle
文件(特别注意 mainClassName
):
然后单击 Android Studio 右侧栏中的 "Gradle" 选项卡和 select 您的 daogenerator 的 "run" 任务,如下所示:
对我有用,更多详情请查看 link:https://github.com/greenrobot/greenDAO/issues/619
http://greenrobot.org/greendao/documentation/generator/#Triggering_generation
除了@Jesto Paul 提到的内容,我还更改了生成器中的以下内容 class
new DaoGenerator().generateAll(schema, "./app/src/main/java"); - shows Path
not exist.
至
new DaoGenerator().generateAll(schema, "../app/src/main/java");
(为路径添加了双点)。执行此操作后,生成器会在文件夹中创建表。
我有一个 Android 项目,使用 Android Studio 2.3,它使用 GreenDAO 生成 类 与 SQLite 数据库交互。 DaoGenerator 项目以前一直有效...但今天我只需要将 2 columns/properties 添加到一个实体,每当我尝试 运行 生成器项目时,我都会收到以下错误:
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
.
出于某种原因,我 运行 在更新 android buildToolsVersion 后遇到了同样的问题。
经过一段时间的搜索,我不小心检查了 "Run > Edit Configurations..." DaoGenerator-Application。
在 JRE 列表中选择了 "Android API 25 Platform"。所以我在我的电脑上把它改回了外部 Java 运行(例如 "1.8",几天前就做过)。这为我解决了。
编辑:在这个项目中我使用 GreenDAO 2.1.0
编辑 2:
https://github.com/greenrobot/greenDAO/issues/619 - http://greenrobot.org/greendao/documentation/generator/#Triggering_generation
像这样为您的生成器设置 build.gradle
文件(特别注意 mainClassName
):
然后单击 Android Studio 右侧栏中的 "Gradle" 选项卡和 select 您的 daogenerator 的 "run" 任务,如下所示:
对我有用,更多详情请查看 link:https://github.com/greenrobot/greenDAO/issues/619 http://greenrobot.org/greendao/documentation/generator/#Triggering_generation
除了@Jesto Paul 提到的内容,我还更改了生成器中的以下内容 class
new DaoGenerator().generateAll(schema, "./app/src/main/java"); - shows Path not exist.
至
new DaoGenerator().generateAll(schema, "../app/src/main/java");
(为路径添加了双点)。执行此操作后,生成器会在文件夹中创建表。