我正在使用 Android Studio 并想使用 ORMLite 框架。ORMLite for Android 有一个通过表配置文件创建 DAO 的机制。
如何在 Android Studio 中设置额外的运行配置以生成此配置?
我正在使用 Android Studio 并想使用 ORMLite 框架。ORMLite for Android 有一个通过表配置文件创建 DAO 的机制。
如何在 Android Studio 中设置额外的运行配置以生成此配置?
我设法做到了,但这有点棘手。
我有一个名为 DatabaseConfigUtil 的类,它扩展了 OrmLiteConfigUtil,我只是按照 ormlite 官方教程创建的,所以我假设你做了同样的事情并且也有这个类。请注意,您必须传递配置文件的完整路径,而不仅仅是文件名。尽管如此,这里是:
public class DatabaseConfigUtil extends OrmLiteConfigUtil {
private static final Class<?>[] classes = new Class[] {
Class1.class, Class2.class, Class3.class, Class4.class
};
public static void main(String[] args) throws SQLException, IOException {
writeConfigFile(new File("PATH/TO/ANDROID/PROJECT/src/main/res/raw/ormlite_config.txt"), classes);
}
}
这是我们要执行以创建 ormlite_config.txt 的类。
在 Android Studio 项目导航面板中,右键单击 DatabaseConfigUtil.java 并选择“运行”(带有绿色箭头的选项)。如果您没有创建运行配置,它将为您创建一个。
现在,只需编辑配置
在“启动前”部分中,删除 Make。如果在原始文件夹中您已经有文件 ormlite_config.txt,这没有问题,但如果您没有,当您运行该类时,项目将编译,这将失败,因为 ormlite_config.txt 不存在。
现在再次运行该项目。
现在一切都应该顺利进行。
干杯
---------------------------------------- ## -------- --------
更新:
最近我不得不再次使用 ORMLite,并决定这个解决方案可以使用 gradle 插件自动化。在创建自己的开发人员之前,作为懒惰的开发人员,我决定检查是否有人之前尝试过相同的操作。谢天谢地,@snicolas 做到了,你可以在这里找到他的插件。我已经尝试过了,而且效果还不错。它会创建一个名为的任务createORMLiteConfigFile*Variant*
,您可以运行该任务来生成文件。
收集@Joao 回答下的所有评论给了我这个可行的解决方案:
1)为您的数据库配置文件生成器编辑配置:
2)配置Working directory
为$MODULE_DIR$/src/main
。
3) 在Before launch
中,替换Make
为Make, no error check
完成这些步骤后,您可以只指定OrmLiteConfigUtil
类中的文件名:
public class DBConfigUtil extends OrmLiteConfigUtil {
/**
* To make this work in Android Studio, you may need to update your
* Run Configuration as explained here:
* http://stackoverflow.com/a/17332546
*/
public static void main(String[] args) throws Exception {
writeConfigFile("ormlite_config.txt", sClasses);
}
我遇到了与 ClassNotFoundException 相同的问题。解决方法是临时更改代码以使编译器编译项目。
我必须删除我在 DatabaseHelper 类中使用的 R.raw.ormlite_config 值,我将其传递给 super()。
public class DBConfigUtil extends OrmLiteConfigUtil {
private static final Class<?>[] classes = new Class[] {Workout.class};
public static void main(String[] args) throws IOException, SQLException {
writeConfigFile("ormlite_config.txt",classes);
}
}
我的扩展了扩展 OrmLiteSqliteOpenHelper 的 DBHelper 类还需要不使用原始文件夹。这有助于成功编译项目。
public DBHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION,1);// R.raw.ormlite_config
}
好的,我偶然发现了与 OP 一样的 ClassNotFoundException。这是我解决它的方法:
简短说明:我有一个库项目和一个主项目,并且都使用 Gradle 进行设置,这可能会有很大的不同,因为之前调用的解决方案不适用于我的设置。
所以我要做的步骤:
我创建了 DatabaseConfigUtil 类
public class DatabaseConfigUtil extends OrmLiteConfigUtil {
public static final Class<?>[] MODELS = {Character.class, Party.class, Clazz.class};
/**
* This must be called as a stand alone app by a JRE instance and NOT by android.
* It will create an ormlite config file that will make the reflection for annotation and more easier and faster.
* <p/>
* Make sure you have pathOfProject/build/classes/debug in your class path when running!
* <p/>
* Working class path:
* <code>-classpath /usr/lib/jvm/java-7-oracle/lib/jconsole.jar:/usr/lib/jvm/java-7-oracle/lib/dt.jar:/usr/lib/jvm/java-7-oracle/lib/sa-jdi.jar:/usr/lib/jvm/java-7-oracle/lib/tools.jar:/usr/lib/jvm/java-7-oracle/lib/javafx-doclet.jar:/usr/lib/jvm/java-7-oracle/lib/ant-javafx.jar:/usr/lib/jvm/java-7-oracle/lib/javafx-mx.jar:/home/martin/workspace/idea/Project/MainProject/libs/ormlite-android-4.45.jar:/home/martin/workspace/idea/Project/MainProject/libs/ormlite-core-4.45.jar:/opt/android-studio/lib/idea_rt.jar:/home/martin/workspace/idea/Project/MainProject/build/classes/debug:/opt/android/platforms/android-16</code>
*
* @param args none will be used.
* @throws Exception
*/
public static void main(String[] args) throws Exception {
writeConfigFile(new File("MODULENAME/src/main/res/raw/ormlite_config.txt"), MODELS);
}
}
请注意我在文档中使用的类路径:它基本上基于您尝试运行上述类时获得的正常类路径(只需复制它)
VM options
您应该看到创建了您定义的类的输出MODELS
。
旁注:Joao Sousa 说您应该更改 ORMlite 源代码。有一个更简单的方法:该writeConfigFile(fileName)
方法似乎在新的 Gradle 结构中被破坏,因为它开始在模块根目录中查找并上升而不是下降,src/main/res/raw
因此我需要使用另一个可以将文件对象作为参数(见上面的代码)。
最后说明:当我尝试在一次印刷机上制作很多东西时,我创建了一个名为“PROJECTNAME FULL”的第二个运行配置,它将执行“make”而不是运行 ormlite 运行配置,最后是第二个“MAKE”。
第一个 make 编译源以便可以创建 ormlite 配置,第二个“make”确保将新创建的配置文件添加到将安装的新创建的构建中。这种“完整”配置不需要每次都运行,但至少在您更改模型类时运行一次。
我遇到了麻烦,因为我的数据库类是在我的 android 项目外部的 Java 项目中定义的。但是 OrmLiteConfigUtil 是在 ormlite-android 库中定义的,并且必须在 android 项目本身中构建。
没关系,格雷提前计划。有一个 writeConfigFile 重载,它接受指定搜索目录的 File 参数。
public class DatabaseConfigUtil extends OrmLiteConfigUtil {
public static void main(String[] args) throws Exception {
File conffile = new File("app/src/main/res/raw/ormlite_config.txt");
File searchdir = new File("../jclip/tdb/src/main/java/");
writeConfigFile(conffile, searchdir);
}
}
在“编辑配置”中将“工作目录”更改为项目的 /src/main