【发布时间】:2015-12-25 13:28:41
【问题描述】:
如果您正在寻找示例 gradle protobuf 项目,请查看 here。
我很难使用 gradle 和 protobuf,
我想创建一个简单的 gradle 项目,它将从默认的 src/main/proto、src/test/proto 中获取任何 proto 文件并将它们相应地编译为 src/main/java、src/test/java,然后将其打包到一个 jar 中并发布到本地 repo。
不幸的是,我是 gradle 新手,无法弄清楚原始项目是如何组成的。
这是我未完成的 build.gradle 文件
apply plugin: 'java'
apply plugin: "com.google.protobuf"
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.7.0'
}
}
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.protobuf:protobuf-java:3.0.0-beta-1'
}
sourceSets {
main {
proto {
srcDir 'src/main/proto'
}
java {
srcDir 'src/main/java'
}
}
test {
proto {
srcDir 'src/test/proto'
}
proto {
srcDir 'src/test/java'
}
}
}
protobuf {
// Configure the protoc executable
protoc {
// Download from repositories
artifact = 'com.google.protobuf:protoc:3.0.0-alpha-3'
}
generateProtoTasks {
// all() returns the collection of all protoc tasks
all().each { task ->
// Here you can configure the task
}
// In addition to all(), you may get the task collection by various
// criteria:
// (Java only) returns tasks for a sourceSet
ofSourceSet('main')
}
}
运行 jar 任务后,我们有这个:
您可以看到 gradle 将测试和主原型构建到同一个类目录(红色箭头),在 jar 中我可以看到包含两个生成的类(而应该跳过测试)。
但主要问题是我想让 将 proto 文件直接编译到适当的源目录(蓝色箭头),之后普通构建会做正确的事情......毕竟我们需要那些src 中的类以在业务逻辑中使用它们...
所以我们只需要一项将 proto 编译到适当 src 目录的任务......仅此而已。
src/main/proto to src/main/java
src/test/proto to src/test/java
当前项目位于here。请帮忙配置一下,我很确定以后会有很多人需要它...
【问题讨论】:
-
你能分享一下可运行的例子吗?我知道它不会完成。
-
@Opal github.com/vach/sample-gradle-protobuf 我会把最终的工作版本留在那里供其他人使用
-
@SubOptimal 我做到了,它是一个多项目构建,要使其工作,需要了解整个事情是如何工作的,只需尝试导入它,你就会看到,它甚至不会自己工作,你应该在你能够创建一个项目之前修复一些未解决的依赖项......我只想要一个简单的简约项目......如果你这样做了,请创建一个工作我会尽快理解代码看看吧。
-
@vach,看看这一行:github.com/google/protobuf-gradle-plugin/blob/master/src/main/…。由于 proto 任务已添加到
afterEvaluate中,您不会在gradle tasks输出中看到此任务 - 但它们确实存在。运行gradlew generateProto并调查build目录。源被生成。
标签: java gradle build protocol-buffers