警告: 以下选项未被任何处理器识别: '[room.schemaLocation]'

27

我收到了以下警告:

警告:未被任何处理器识别的选项为:“[room.schemaLocation]”

我已经检查过以下链接的解决方案,似乎这是一个不同的问题。我在使用Android Studio IDE进行Android项目开发时遇到了此错误。更改xml中的绑定变量后出现了该错误(由于取消装箱警告并且我实际上只需要int,因此将类型从Integer更改为int)。

已检查以下解决方案:

NetBeans bug 233098

getting-android-studio-gradle-and-android-annotations-working-together

annotationprocessor-option-not-recorgnized-by-any-processor

4个回答

17

我曾经在一个多模块项目中添加Room时遇到了类似的问题。对于我的项目,问题是由于将我的RoomDatabase派生类添加到库模块并配置我的应用程序模块的build.gradle而引起的。

解决方法是配置包含RoomDatabase派生类的模块的build.gradle

解决方案有三个主要部分:

1. 你的RoomDatabase派生类(例如这个例子中的AppDatabase

@Database(entities = arrayOf(SomeWidgetEntity::class), version = 50)
abstract class AppDatabase : RoomDatabase() {
  //your code goes here
}

2. 在包含 AppDatabase 的模块的 build.gradle 文件中,将以下内容添加到 defaultConfig{} 部分。

defaultConfig {

    javaCompileOptions {
        annotationProcessorOptions {
        arguments = ["room.schemaLocation":
                     "$projectDir/schemas".toString()]
        }
    }

}

3. 在同一个 build.gradle 文件的 dependencies{} 部分中,添加关于room编译器的依赖项。

dependencies {

    //for kotlin based projects (where $room_version is the version of room you're using)
    kapt "android.arch.persistence.room:compiler:$room_version"
    //for java based projects
    annotationProcessor "android.arch.persistence.room:compiler:$room_version"

}

1
非常好的答案,解释得很清楚。这解决了我的问题,而且很有道理。谢谢。 - reixa

15

我尝试从应用程序的build.gradle文件中删除以下内容:

 javaCompileOptions {
    annotationProcessorOptions {
        arguments = ["room.schemaLocation":
                             "$projectDir/schemas".toString()]
    }
}

然后,我运行了"rebuild",再次添加相同的片段,错误就消失了。我不知道为什么这样做可以解决问题,但确实有效。

注意:重新构建\清理而不删除上述Gradle定义对我没有用,因此必须在重新构建之前将其删除并再次添加。


这个方法可以有效解决问题:没有处理器能识别以下选项:'[room.schemaLocation, kapt.kotlin.generated, room.incremental, room.expandProjection]'。我从我的应用程序build.gradle defaultConfig中删除了kapt部分,然后进行了gradle resync、clean和rebuild。然后我恢复了该部分并重新构建了项目。错误已经消失了。我的设置是: kapt { arguments { arg("room.schemaLocation", "$projectDir/schemas".toString()) arg("room.incremental", "true") arg("room.expandProjection", "true") } } - Howard
3
这实际上并没有解决问题。我尝试过,但没有进行任何代码更改,因此其他人克隆项目时也会出现这个问题。而且,如果重新克隆或重新启动项目,问题会再次出现... - Tim

0

对于Maven,请在Maven编译器插件配置中添加以下内容:

                    <annotationProcessorPaths>
                         <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${org.mapstruct.version}</version>
                        </path>
                    </annotationProcessorPaths>

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0

我遇到了同样的问题。问题是 Hilt 版本与 Kotlin 版本不兼容。

你可以在项目级别的 build.gradle 文件中对比下面的代码。

dependencies {
        classpath 'com.android.tools.build:gradle:8.0.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20"
        classpath "com.google.dagger:hilt-android-gradle-plugin:2.46.1"
    }

而下面的代码位于模块级别的build.gradle文件中。

implementation "com.google.dagger:hilt-android:2.46.1"
kapt "com.google.dagger:hilt-android-compiler:2.46.1"

更多信息,请查看Hilt gradle设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接