如果您正在寻找Gradle Protobuf示例项目,请在此处查看。
我在处理Gradle和Protobuf方面遇到了困难,我想创建一个简单的Gradle项目,将默认的src/main/proto
、src/test/proto
中的任何Proto文件编译为相应的src/main/java
、src/test/java
,然后打包成一个jar并发布到本地仓库。
不幸的是,我还不熟悉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将测试和主要proto文件构建到同一个类目录中(红色箭头),在jar包中,我可以看到包括了生成的所有类(尽管测试应该被跳过)。
但主要问题是我想要直接将编译proto文件到适当的源目录(蓝色箭头),之后普通的构建就会做正确的事情...毕竟我们需要这些类在业务逻辑中使用...
因此,我们只需要一个任务来将proto编译到适当的源目录中...仅此而已。
src/main/proto to src/main/java
src/test/proto to src/test/java
当前项目所在地为这里。请帮忙配置,我相信以后会有很多人需要它...