1. 概述
在这个教程中,我们将学习如何使用自定义源目录(包含Protocol Buffers文件)编译并自动生成代码。我们将探讨默认配置以及如何自定义它。
2. 配置
Gradle的Protocol Buffers插件默认会查找src/main/proto
目录来获取所有.proto文件进行编译,并为这些文件生成源代码。让我们创建一个示例.proto文件:
syntax = "proto3";
package com.baeldung.protobuf;
option java_multiple_files = true;
option java_package = "com.baeldung.protobuf.service";
message User {
string firstName = 1;
optional string middleName = 2;
string lastName = 3;
optional uint32 age = 4;
}
将此.proto文件保存到名为src/sample_protofiles
的随机目录中。现在,我们将在build.gradle
文件中更新配置,使其包含这个目录以进行编译和生成源代码:
sourceSets {
main {
proto {
srcDir 'src/sample_protofiles'
}
//other configuration
}
test {
proto {
srcDir 'src/sample_protofiles'
}
}
}
我们也可以配置多个srcDir
,引用包含.proto文件的不同目录。这将包括所有这些.proto文件,除了默认的src/main/proto
目录。它将编译所有.proto文件并生成源代码。我们甚至可以为main
和test
源集配置不同的目录。
3. 代码生成与验证
运行以下build
命令来生成代码:
gradle build
它将创建一个代码生成目录。
现在,我们可以轻松地通过创建User
类的Java实例来验证生成的代码:
final String firstName = "John";
final String lastName = "Doe";
final int age = 28;
User user = User.newBuilder()
.setFirstName(firstName)
.setLastName(lastName)
.setAge(age)
.build();
assertEquals(firstName, user.getFirstName());
assertEquals(lastName, user.getLastName());
assertEquals(age, user.getAge());
4. 总结
在这篇简短的文章中,我们了解了如何为Protocol Buffers文件配置自定义源目录。
如往常一样,示例的完整源代码可在GitHub上找到。