example - Android Studio ejecuta la configuración para la generación de configuración ORMLite
toolbar android example (6)
Estoy usando Android Studio y quiero usar el framework ORMLite. ORMLite para Android tiene un mecanismo para crear DAO a través del archivo de configuración de tabla .
¿Cómo configurar configuración de ejecución adicional en Android Studio para generar esta configuración?
Logré hacerlo, pero fue un poco complicado.
Tengo una clase llamada DatabaseConfigUtil que amplía OrmLiteConfigUtil, que creé simplemente siguiendo el tutorial oficial de ormlite, así que supongo que hiciste lo mismo y también tienes esa clase. Tenga en cuenta que debe pasar la ruta completa al archivo de configuración, en lugar de solo el nombre del archivo. No obstante, aquí está:
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);
}
}
Esta es la clase que queremos ejecutar para crear el archivo ormlite_config.txt.
En el panel de navegación del proyecto Android Studio, haga clic con el botón derecho en DatabaseConfigUtil.java y seleccione "Ejecutar" (la opción con la flecha verde). Si no tiene una Configuración de ejecución creada, creará una para usted.
Ahora, solo edita la configuración
En la sección "Antes del lanzamiento", quite Make. Esto no es problemático si en la carpeta raw ya tiene el archivo omlite_config.txt, pero si no lo hace, cuando ejecute la clase, el proyecto compilará y fallará porque el archivo ormlite_config.txt no existe.
Ahora ejecuta el proyecto nuevamente.
Todo debería ir bien ahora.
Aclamaciones
---------------------------- ## -------------------- --------
ACTUALIZAR:
Recientemente tuve que trabajar con ORMLite nuevamente y decidí que esta solución podría automatizarse con un plugin de Gradle. Antes de crear el mío, como el desarrollador perezoso que soy, decidí comprobar si alguien había intentado lo mismo antes. Afortunadamente, @snicolas hizo exactamente eso y puedes encontrar su complemento here . Lo probé y funciona bastante bien. Crea una tarea llamada createORMLiteConfigFile*Variant*
que puede ejecutar para generar el archivo.
Ok, me lancé sobre la misma ClassNotFoundException como el OP. Así es como lo resolví:
Nota breve: Tengo un proyecto de biblioteca y un proyecto principal, y ambos están configurados con Gradle, eso puede ser una gran diferencia ya que la solución que se llamó anteriormente no funcionaba para mi configuración.
Entonces mis pasos para hacer:
Creé la clase 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); } }
Tenga en cuenta la ruta de clase que utilicé en mi documentación: básicamente se basa en el classpath normal que obtiene cuando intenta ejecutar la clase anterior (simplemente cópiela)
- Cree una configuración de ejecución y agregue la ruta de clases que acaba de copiar como
VM options
- Asegúrese de haber eliminado todas las entradas que contengan "build / classes / production / MODULENAME"
- Agregue la ruta completa de su "compilación / clases / depuración" al classpath
- Compila y ejecuta la configuración.
Debería ver el resultado de que se crearon las clases que definió en MODELS
.
Nota al margen: Joao Sousa dijo que debería cambiar el código fuente de ORMlite. Hay un método más fácil: el método writeConfigFile(fileName)
parece estar roto en la nueva estructura de Gradle, ya que comienza a buscarse en la raíz del módulo y aumenta en lugar de bajar a src/main/res/raw
así que necesitaba usar el otro donde podría dar un objeto de archivo como parámetro (ver el código anterior).
Nota final: cuando trato de hacer muchas cosas en una prensa, creé una segunda configuración de ejecución llamada "PROJECTNAME FULL" que hará una "marca" que ejecuta la configuración de ejecución de ormlite y finalmente una segunda "MAKE".
La primera compila las fuentes para que se pueda crear la configuración de ormlite y la segunda "marca" se asegura de que el nuevo archivo de configuración creado se agregue a la compilación recién creada que se instalará en ese momento. Esta configuración "FULL" no necesita ejecutarse todas las veces, pero al menos una vez cuando modificó sus clases de modelo.
Recopilar todos los comentarios bajo la respuesta de @Joan me dio esta solución de trabajo:
1) Editar la configuración para su generador de archivos de configuración DB:
2) Configure el Working directory
para que sea $MODULE_DIR$/src/main
.
3) Before launch
, reemplace Make
with Make, no error check
Cuando tenga estos pasos en su lugar, puede especificar solo el nombre del archivo en su clase 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://.com/a/17332546
*/
public static void main(String[] args) throws Exception {
writeConfigFile("ormlite_config.txt", sClasses);
}
Tengo el mismo problema que OP obtuvo para la ClassNotFoundException. La solución para esto es cambiar temporalmente el código para hacer que el compilador compile el proyecto.
Tuve que eliminar el valor R.raw.ormlite_config que utilicé en la clase DatabaseHelper, que paso al 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);
}
}
Mi clase DBHelper que amplía el extiende OrmLiteSqliteOpenHelper necesita no usar la carpeta raw todavía. Esto ayuda a compilar el proyecto con éxito.
public DBHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION,1);// R.raw.ormlite_config
}
- compilado el proyecto.
- cambie el directorio de trabajo a la aplicación / src / carpeta principal.
- Cambió el JRE a JDK1.8
- Elimine la sección Make from the Before launch.
- correr
Tuve problemas con esto porque mis clases de base de datos se definieron en un proyecto de Java externo a mi proyecto de Android. Pero OrmLiteConfigUtil se define en la biblioteca ormlite-android, y debe estar integrado en el proyecto de Android.
Está bien, Gray planea el futuro. Hay una sobrecarga de writeConfigFile que acepta argumentos de archivo que especifican el directorio de búsqueda.
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);
}
}
cambie el "directorio de trabajo" a / src / main del proyecto en "Editar Configuraciones"