【问题标题】:Error freemarker while instancing GreenDao实例化 GreenDao 时出现错误 freemarker
【发布时间】:2015-01-09 11:55:31
【问题描述】:

当我尝试在 AsyncTask 内部或外部实例化一个新的 DaoGenerator 时,它会使我的应用程序崩溃。

实例化道生成器:

Schema schema = new Schema(1,"com.example.administrator.teste");

Entity user = schema.addEntity("User");

user.addIdProperty();
user.addStringProperty("name");
user.addStringProperty("user");
user.addStringProperty("pass");

try {
    new DaoGenerator().generateAll(schema, "../db/src");
}catch (Exception e)
{
    e.printStackTrace();
}

它给出了以下异常:

引起:java.lang.VerifyError: freemarker/ext/beans/ClassIntrospector 在 freemarker.ext.beans.BeansWrapper.(BeansWrapper.java:318) 在 freemarker.ext.beans.BeansWrapper.(BeansWrapper.java:245) 在 freemarker.ext.beans.BeansWrapper.(BeansWrapper.java:196) 在 freemarker.ext.beans.BeansWrapperSingletonHolder.(BeansWrapperSingletonHolder.java:27) 在 freemarker.ext.beans.BeansWrapper.getDefaultInstance(BeansWrapper.java:795) 在 freemarker.template.ObjectWrapper.(ObjectWrapper.java:49) 在 freemarker.template.Configuration.getDefaultObjectWrapper(Configuration.java:1552) 在 freemarker.core.Configurable.(Configurable.java:151) 在 freemarker.template.Configuration.(Configuration.java:357) 在 freemarker.template.Configuration.(Configuration.java:233) 在 de.greenrobot.daogenerator.DaoGenerator.(DaoGenerator.java:61) 在 com.example.administrator.teste.LoginActivity$CreateDatase.doInBackground(LoginActivity.java:62) 在 com.example.administrator.teste.LoginActivity$CreateDatase.doInBackground(LoginActivity.java:48) 在 android.os.AsyncTask$2.call(AsyncTask.java:288) 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 在 java.lang.Thread.run(Thread.java:841)

我试图通过在项目 freemarker 中编译来解决这个问题,但它给出了相同的异常。

附加信息:

  • IDE:Android Studio 1.0.1
  • Java : jdk 8
  • 库:GreenDao v3

格兰德尔:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.administrator.teste"
        minSdkVersion 19
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'de.greenrobot:greendao-generator:1.3.1'
    compile 'freemarker:freemarker:2.3.9'
    compile 'org.freemarker:freemarker:2.3.21'
}

【问题讨论】:

    标签: java android android-asynctask freemarker greendao


    【解决方案1】:

    引用http://freemarker.org/freemarkerdownload.html

    Until about 2007 the Maven group name was "freemarker" instead of "org.freemarker", 
    and as the XML comment above says, this can cause problems, 
    as Maven will see them as two independent artifacts with no version conflict. 
    If you run into this issue, find the dependency that depends on the old FreeMarker, 
    and add this to your application's POM where you declare the problematic dependency:
    
    <dependency>
      <groupId>...</groupId>
      <artifactId>...</artifactId>
      <version>...</version>
      <exclusions>
        <exclusion>
          <groupId>freemarker<!-- Do NOT use this org-less group! --></groupId>
          <artifactId>freemarker</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    

    在你的依赖项中试试这个:

    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.21</version>
    </dependency>
    
    <dependency>
      <groupId>de.greenrobot</groupId>
      <artifactId>greendao-generator</artifactId>
      <version>1.3.1</version>
      <exclusions>
        <exclusion>
          <groupId>freemarker</groupId>
          <artifactId>freemarker</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    

    或者使用 Gradle:

    compile 'org.freemarker:freemarker:2.3.21'
    compile('de.greenrobot:greendao-generator:1.3.1') {
        exclude module: 'freemarker'
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-25
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多