Android Studio exécuter la configuration pour la génération de config ORMLite

J'utilise Android Studio et je veux utiliser ormlite framework. ORMLite pour Android a un mécanisme pour faire la création de DAO par tableau de fichier de configuration.

comment configurer une Configuration D'exécution supplémentaire dans Android Studio pour générer cette configuration?

32
demandé sur Gray 2013-06-25 17:32:40

6 réponses

j'ai réussi à le faire, mais c'était un peu difficile.

j'ai une classe appelée DatabaseConfigUtil qui étend OrmLiteConfigUtil, que j'ai créé juste en suivant le tutoriel officiel d'ormlite, donc je vais juste supposer que vous avez fait la même chose et aussi avoir cette classe. veuillez noter que vous devez passer le chemin complet au fichier de configuration, au lieu du nom du fichier. néanmoins, le voici:

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

C'est la classe que nous voulons exécuter dans ordre de création de l'ormlite_config.txt.

dans le panneau de navigation du projet Android Studio, cliquez avec le bouton droit de la souris sur la base de données Configutil.java et sélectionnez "Exécuter" (l'option avec la flèche verte). Si vous n'avez pas de Configuration D'exécution créée, elle en créera une pour vous.

maintenant, éditez la configuration

enter image description here

dans la section "avant le lancement", supprimez la marque. Ce n'est pas problématique si dans les premières dossier que vous avez déjà le fichier ormlite_config.txt, mais si vous ne le faites pas, lorsque vous lancez la classe, le projet compilera ce qui échouera car ormlite_config.txt n'existe pas.

enter image description here

maintenant, exécutez le projet à nouveau.

Tout devrait bien se passer maintenant.

Cheers

---------------------------- ## ----------------------------

mise à JOUR:

récemment j'ai dû travailler à nouveau avec ORMLite et j'ai décidé que cette solution peut être automatisé avec un plugin gradle. Avant de créer mon propre, comme le développeur paresseux que je suis, j'ai décidé de vérifier si quelqu'un avait essayé la même chose avant. Heureusement, @snicolas a fait exactement cela et vous pouvez trouver son plugin ici. Je l'ai essayé et il fonctionne raisonnablement bien. Il crée une tâche appelée createORMLiteConfigFile*Variant* que vous pouvez exécuter pour générer le fichier.

39
répondu Joao Sousa 2016-04-28 14:23:03

la collecte de tous les commentaires sous la réponse de @Joao m'a donné cette solution de travail:

1) modifier la Configuration de votre générateur de fichiers de configuration DB:

edit configuration

2) Configurer le Working directory$MODULE_DIR$/src/main.

3) en Before launch, remplacez MakeMake, no error check

working directory

lorsque vous avez ces étapes en place, vous pouvez spécifier juste le nom du fichier dans votre OrmLiteConfigUtil catégorie:

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);
    }
22
répondu Dan J 2015-05-13 18:49:52

j'ai eu le même numéro que OP a eu pour la ClassNotFoundException. La solution consiste à modifier temporairement le code pour faire en sorte que le compilateur compile le projet.

j'ai dû enlever le R. raw.ormlite_config valeur que j'ai utilisée dans la classe DatabaseHelper, que je passe à 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);
    }

}

ma classe DBHelper qui étend les extensions OrmLiteSqliteOpenHelper a besoin de ne pas utiliser encore le dossier brut. Cela aide à compiler le projet réussi.

public DBHelper(Context context){
    super(context,DATABASE_NAME,null,DATABASE_VERSION,1);// R.raw.ormlite_config
}

enter image description here

  1. compilé le projet.
  2. changer le répertoire de travail de l'application/src/dossier principal.
  3. a changé le JRE en JDK1.8
  4. supprimer la marque de la section Avant lancement.
  5. Exécuter
9
répondu Gangadhar Chowdary Payyavula 2014-08-03 21:23:58

Ok j'ai trébuché sur la même ClassNotFoundException que L'OP. Voici comment je l'ai résolu:

brève note: j'ai un projet de bibliothèque et un projet principal et les deux sont configurés avec Gradle, ce qui pourrait être une différence car la solution précédemment appelée ne fonctionnait pas pour mon installation.

mes pas à faire:

  1. j'ai créé la classe 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);
        }
    }
    
  2. Notez le chemin de classe que j'ai utilisé dans mon documentation: elle est basée essentiellement sur le chemin de classe normal que vous obtenez lorsque vous essayez d'exécuter la classe ci-dessus (il suffit de la copier)

  3. Créer une configuration d'essai et ajouter le chemin que vous venez de copier VM options
  4. assurez-vous d'avoir supprimé toutes les entrées qui contiennent "build/classes/production/MODULENAME"
  5. ajouter le chemin complet de votre "build / classes / debug" à la classpath
  6. Compiler et exécuter le configuration.

Vous devriez voir la sortie que les classes que vous avez définie dans MODELS sont créés.

côté note: Joao Sousa a dit que vous devriez changer le code source D'ORMlite. Il y a une méthode plus simple:writeConfigFile(fileName) la méthode semble être cassée dans la nouvelle structure Gradle car elle commence à regarder dans la racine du module et monte au lieu de descendre à src/main/res/raw donc j'ai dû utiliser l'autre où je pouvais donner un objet fichier comme paramètre (voir ci-dessus) code.)

note finale: alors que j'essaie de faire beaucoup de choses sur une seule pression, j'ai créé une deuxième configuration D'exécution qui s'appelle "PROJECTNAME FULL" qui fera un "make" qui exécutera la configuration d'exécution ormlite et finalement un second "MAKE".

Le premier make compile les sources pour que la configuration d'ormlite puisse être créée et le second "make" s'assure que le nouveau fichier de configuration créé est ajouté à la compilation nouvellement créée qui sera alors installée. Le "FULL" la configuration n'a pas besoin de s'exécuter à chaque fois, mais au moins une fois lorsque vous avez changé vos classes de model.

5
répondu WarrenFaith 2013-07-09 14:13:08

j'ai eu des problèmes avec cela parce que mes classes DB ont été définies dans un projet Java externe à mon projet android. Mais L'OrmLiteConfigUtil est défini dans la bibliothèque ormlite-android, et doit être construit dans le projet android lui-même.

C'est bon, Gray prévoit à l'avance. Il y a une surcharge de writeConfigFile qui accepte les arguments de fichier spécifiant le répertoire de recherche.

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);
  }
}
1
répondu DS Justice 2016-05-12 18:03:14

changez le "répertoire de travail" en / src / main du projet dans "Modifier les Configurations"

0
répondu Rogério Nóbrega 2015-08-20 03:14:46