Android Studio运行ORMLite配置生成配置

时间:2013-06-25 13:32:41

标签: android android-studio ormlite

我正在使用Android Studio并希望使用ORMLite框架。 ORMLite for Android有一种通过table config file创建DAO的机制。

如何在Android Studio中设置其他运行配置以生成此配置?

6 个答案:

答案 0 :(得分:39)

我设法做到了,但这有点棘手。

我有一个名为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并选择“Run”(带有绿色箭头的选项)。如果您没有创建运行配置,它将为您创建一个。

现在,只需编辑配置

即可

enter image description here

在“发布前”部分中,删除“制作”。如果在原始文件夹中你已经拥有文件ormlite_config.txt,这没有问题,但是如果你没有,当你运行类时,项目将编译哪个将失败,因为ormlite_config.txt不存在。

enter image description here

现在再次运行该项目。

现在一切都应该顺利进行。

干杯

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

更新:

最近我不得不再次与ORMLite合作,并决定使用gradle插件自动化该解决方案。在创建我自己之前,作为我的懒惰开发者,我决定检查是否有人曾尝试过相同的操作。值得庆幸的是,@ snicolas就是这么做的,你可以找到他的插件here。我试过了,它运作得相当好。它会创建一个名为createORMLiteConfigFile*Variant*的任务,您可以运行该任务来生成文件。

答案 1 :(得分:22)

收集@ Joao回答下的所有评论给了我这个有效的解决方案:

1)编辑数据库配置文件生成器的配置:

edit configuration

2)将Working directory配置为$MODULE_DIR$/src/main

3)在Before launch中,将Make替换为Make, no error check

working directory

当您完成这些步骤后,您只需在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);
    }

答案 2 :(得分:9)

我得到了与ClassNotFoundException相同的OP问题。解决方法是暂时更改代码以使编译器编译项目。

我不得不删除我在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
}

enter image description here

  1. 编译了该项目。
  2. 将工作目录更改为app / src / main文件夹。
  3. 将JRE更改为JDK1.8
  4. 从发布之前删除“制作”部分。
  5. 运行

答案 3 :(得分:5)

好的,我在OP上遇到了同样的ClassNotFoundException。以下是我解决它的方法:

简短说明:我有一个库项目和一个主项目,两者都设置为使用Gradle,这可能是一个很大的不同,因为之前调用的解决方案对我的设置不起作用。

所以我要做的步骤:

  1. 我创建了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. 请注意我在文档中使用的类路径:它基本上是基于您尝试运行上述类时获得的正常类路径(只需复制它)

  3. 创建运行配置并添加刚刚复制为VM options
  4. 的类路径
  5. 确保已删除包含“build / classes / production / MODULENAME”
  6. 的每个条目
  7. 将“build / classes / debug”的完整路径添加到类路径
  8. 编译并运行配置。
  9. 您应该看到在MODELS中定义的类的输出。

    旁注:Joao Sousa说你应该更改ORMlite源代码。有一种更简单的方法:writeConfigFile(fileName)方法似乎在新的Gradle结构中被打破,因为它开始在模块根目录中查找并向上而不是向下到src/main/res/raw所以我需要使用另一个我可以将文件对象作为参数(参见上面的代码)。

    最后注意事项:当我尝试在一次按下时制作大量内容时,我创建了一个名为“PROJECTNAME FULL”的第二次运行配置,它将执行“make”而不是运行ormlite运行配置,最后是第二次“ MAKE”。
    第一个make编译源代码,以便可以创建ormlite配置,第二个“make”确保将新创建的配置文件添加到将要安装的新创建的构建中。这个“FULL”配置不需要每次运行,但至少在您更改模型类时运行一次。

答案 4 :(得分:1)

我遇到了麻烦,因为我的DB类是在我的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);
  }
}

答案 5 :(得分:0)

更改&#34;工作目录&#34;到&#34;编辑配置&#34;

中的/ src / main项目