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'
我试试:
- close/reopen Android工作室
- 重新安装javajdk
- 清理项目/重建项目
- 删除文件夹。gradle
- 回滚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
我正在使用 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'
我试试:
- close/reopen Android工作室
- 重新安装javajdk
- 清理项目/重建项目
- 删除文件夹。gradle
- 回滚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