AndroidStudio gradle 构建锁定在 :app:compileDebugJavaWithJavac 使用 Room

AndroidStudio gradle build locked in :app:compileDebugJavaWithJavac using Room

我正在使用 Android Studio 3.0 beta 6 / gradle: 3.0.0-beta6,今天我遇到了编译问题。

当我开始构建 (CTRL+F9) 时,进程停止运行:":app:compileDebugJavaWithJavac" 我等了1个多小时,什么都没变

Gradle同步没问题,只是编译有问题

我认为这是我项目中的问题,因为我可以使用此 Android Studio 版本编译另一个项目而不会出现问题。

我对这个项目做了很多修改,但我不知道具体问题出在哪里。

我的 gradle 文件包含这个:

implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:design:26.1.0'
implementation 'com.android.support:support-v4:26.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
compile "android.arch.persistence.room:runtime:1.0.0-alpha9-1"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha9-1"
compile 'com.google.android.gms:play-services-vision:11.4.0'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.google.code.gson:gson:2.8.1'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.1'
compile 'com.google.guava:guava:21.0'

我试试:

  1. close/reopen Android工作室
  2. 重新安装javajdk
  3. 清理项目/重建项目
  4. 删除文件夹。gradle
  5. 回滚gradle 文件更改

但问题仍然存在。

有什么想法吗?谢谢

编辑: 我发现问题与 Room Persistence Library 有关,因为当我评论此属性时:

@Database(entities = {Task.class}, version = 1)

构建运行成功。

这是我的数据库class:

@Database(entities = {Task.class}, version = 1)
public abstract class MainDatabase extends RoomDatabase {

private static MainDatabase INSTANCE;

public abstract MainDao mainDao();

private static final Object sLock = new Object();

public static MainDatabase getInstance(Context context) {
        if (INSTANCE == null) {
            INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                    MainDatabase.class, "tr.db")
                    .build();
        }
        return INSTANCE;
    }
}

这是我的实体class:

@Entity(tableName = "tasks")
public class Task {

    @PrimaryKey
    @SerializedName("TaskID")
    @Expose
    public int taskID;

    @SerializedName("TaskNumber")
    @Expose
    public int taskNumber;

    @Embedded
    @SerializedName("ParentTask")
    @Expose
    public Task parentTask;
}

最后,我找到了解决办法。

如果 Room 实体中存在递归,构建会卡住。

如果我删除递归,问题就不会发生:

@Embedded
@SerializedName("ParentTask")
@Expose
public Task parentTask;

我使用 Room 的方式不对。根据文档 (https://developer.android.com/topic/libraries/architecture/room.html#no-object-references):

Room disallows object references between entity classes