如果您正在寻找示例gradle protobuf项目,请查看here .
我正忙着使用gradle和protobuf,我想创建一个简单的gradle项目,它将从默认的 src/main/proto
, src/test/proto
中获取任何proto文件并相应地将它们编译为 src/main/java
, src/test/java
,然后将其打包到jar中并发布到本地repo .
不幸的是,我是新手,无法弄清楚原始项目的组成方式 .
这是我未完成的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将test和main protos构建到相同的类目录(红色箭头),在jar中我可以看到包含的两个生成的类(应该跳过测试) .
但主要问题是我想制作 compile proto files directly to appropriate source directories (蓝色箭头),之后普通构建会做正确的事情......毕竟我们需要src中的那些类在业务逻辑中使用它们......
所以我们只需要一个将proto编译到适当的src目录的任务......仅此而已 .
src/main/proto to src/main/java
src/test/proto to src/test/java
目前的项目位于here . 请帮忙配置一下,我很确定很多人以后会需要它...
1 回答
如果我不太容易解决 . 如果您不想区分自己的源和生成的源,您只需添加设置generatedFileBaseDir就像这样
generateProtoTasks.generatedFilesBaseDir = 'src'
所以整个构建文件看起来像:
比您的文件夹看起来像:
src / main / java / com / vach / tryout / AddressBookProtos.java
src / main / java / com / vach / tryout / protobuf / Main.java
BUT: 将生成与手工制作的源代码混合起来可能不是最佳选择 . 所以我的建议是将源代码生成到像generatedSources这样的自己的目录中,并将此目录添加到java sourceSet中 . 构建文件如下所示:
您的目录将如下所示
src / main / proto / dtos.proto
src / main / java / com / vach / tryout / protobuf / Main.java
generated-sources / main / java / com / vach / tryout / AddressBookProtos.java
一个很好的副作用是你可以在你的git配置中忽略这个generated-sources目录 . 不发布生成的源代码总是一个好主意 .