6

我在构建过程中收到这样的错误:

e: /Users/some/path/SomeClass.java:86: error: cannot find symbol 
e:       
e:     static ConnectionType getConnectionType(Context context) { 
e:            ^ 
e:   symbol:   class ConnectionType 
e:   location: class SomeClass

ConnectionTypeprotobuf 生成的类在哪里。所以看起来 kapt 不能解析生成的类。

我试过什么?

起初我添加了kotlin-apt插件:

apply plugin: 'kotlin-kapt'

然后我将 brotobuf 生成的类添加到源集:

sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
    main.java.srcDirs += 'build/generated/source/proto/main/java'
}

而且我还想在 kapt 开始工作之前生成类。所以我以这种方式订购 gradle 任务:

afterEvaluate {
    def protoTasks = []
    tasks.each { task ->
        if (task.name.contains('proto') || task.name.contains('Proto')) {
            protoTasks.push(task)
        }
    }

    tasks.each { task ->
        if (task.name.startsWith('kapt')) {
            task.dependsOn protoTasks
        }
    }
}

但是所有这些都没有帮助,我仍然遇到同样的错误。如何解决?

4

2 回答 2

1

该错误是由错误的 protobuf 源集路径引起的。我必须在其中使用正确的风味名称,例如:

sourceSets {
    // ...
    main.java.srcDirs += 'build/generated/source/proto/flavor/java'
}

代替

sourceSets {
    // ...
    main.java.srcDirs += 'build/generated/source/proto/main/java'
}
于 2017-07-21T13:22:10.000 回答
0

无需指定sourceDir,如果您想这样做,您必须指定 Java 文件(可能来自 Protobuf)或 Kotlin 文件包含的所有可能路径。事实上,默认值sourceDir包含所有可能的路径。

于 2021-11-12T03:35:20.043 回答