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文件并生成源代码。我们甚至可以为maintest源集配置不同的目录。

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上找到。


原始标题:Configuring Protobuf Compilation with Custom Source Directories | Baeldung