Lau*_*ves 15 protocol-buffers gradle kotlin
我正在尝试构建一个使用Google协议缓冲区和Kotlin使用Gradle的项目.我希望proto文件能够编译成Java源代码,然后从我的Kotlin代码中调用它.
我的源文件排列如下:
src/main/proto/*.proto
src/main/kotlin/*.kt
src/test/kotlin/*.kt
Run Code Online (Sandbox Code Playgroud)
这是我的build.gradle档案:
version '1.0-SNAPSHOT'
apply plugin: 'kotlin'
apply plugin: 'java'
apply plugin: 'com.google.protobuf'
repositories {
mavenCentral()
maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
}
buildscript {
ext.kotlin_version = '1.1-M02'
repositories {
mavenCentral()
maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.0.0'
}
}
dependencies {
compile 'com.google.protobuf:protobuf-java:3.0.0'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
testCompile 'junit:junit:4.12'
}
Run Code Online (Sandbox Code Playgroud)
当我跑步时,./gradlew assemble我得到了一堆"未解决的参考"错误:compileKotlin.之后我可以看到没有生成Java源文件,因此看起来根本没有调用proto编译器.
如果我删除该apply plugin: 'kotlin'行,然后./gradlew assemble成功生成Java源代码,但当然我的Kotlin源代码从未编译过.
我如何解决这个问题,build.gradle以便从Kotlin调用我的protobuf代码?
Lau*_*ves 13
我通过在build.gradle中添加两行来实现这一点.
第一行将原型编译器生成Java代码的目录添加到:compileKotlin查找Java源代码的目录中:
sourceSets.main.java.srcDirs += 'build/generated/source/proto/main/java'
Run Code Online (Sandbox Code Playgroud)
第二个确保在调用之前(重新)生成Java代码:compileKotlin:
compileKotlin.dependsOn ':generateProto'
Run Code Online (Sandbox Code Playgroud)
对于Kotlin和Android:
android {
sourceSets {
debug.java.srcDirs += 'build/generated/source/proto/debug/java'
release.java.srcDirs += 'build/generated/source/proto/release/java'
}
}
Run Code Online (Sandbox Code Playgroud)
必须为每种构建类型添加其他源目录.在此示例中,有两种构建类型:debug和release.
如果您正在使用grpc,则必须为每个构建类型添加另一行:
android {
sourceSets {
debug.java.srcDirs += 'build/generated/source/proto/debug/java'
debug.java.srcDirs += 'build/generated/source/proto/debug/grpc'
release.java.srcDirs += 'build/generated/source/proto/release/java'
release.java.srcDirs += 'build/generated/source/proto/release/grpc'
}
}
Run Code Online (Sandbox Code Playgroud)
至少对于Kotlin 1.0.6,protobuf-gradle-plugin 0.8.0,protobuf 3.2.x和grpc 1.x,它不需要摆弄任务顺序.
| 归档时间: |
|
| 查看次数: |
4553 次 |
| 最近记录: |