Generate Java code cho service contract trong gRPC sử dụng Protocol Buffers Maven Plugin

Khi làm việc với các ứng dụng gRPC trong Java, việc sử dụng công cụ Protocol Buffer Compiler để generate Java code cho service contract là một điều cần thiết. Có nhiều cách để sử dụng Protocol Buffer Compiler này, hoặc là các bạn cài đặt và sử dụng trực tiếp tập tin của Protocol Buffer Compiler ở đây, hoặc là các bạn có thể sử dụng thông qua một Maven plugin. Để tiện lợi, các bạn có thể sử dụng một Maven plugin. Cũng có nhiều Maven plugin làm được chuyện này, một trong số đó có tên là Protocol Buffers Maven Plugin. Trong bài viết này, mình sẽ hướng dẫn các bạn cách sử dụng Protocol Buffers Maven Plugin để generate Java code cho service contract trong gRPC các bạn nhé!

Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ:

Các bạn hãy khai báo các gRPC dependencies như sau:

với “grpc.version” có giá trị như sau:

Mình sẽ tạo mới một tập tin .proto định nghĩa một service contract đơn giản cho gRPC server nằm trong thư mục src/main/proto:

có nội dung như sau:

Bây giờ, chúng ta sẽ khai báo sử dụng Protocol Buffers Maven Plugin để generate Java code các bạn nhé!

Mình sẽ khai báo plugin này như sau:

Có 2 cấu hình cần thiết liên quan đến việc sử dụng Protocol Buffer Compiler và plugin gRPC Java Codegen cho Protocol Buffer Compiler để generate các message và các service được định nghĩa trong tập tin .proto, mà các bạn cần phải khai báo với Protocol Buffers Maven Plugin.

Như các bạn thấy ở trên, mình khai báo sử dụng Protocol Buffer Compiler sử dụng plugin parameter <protocArtifact> với giá trị trỏ đến dependency protoc. Format khi khai báo dependency này là groupId:artifactId:version[:type[:classifier]] các bạn nhé! Dependency protoc sẽ detect hệ điều hành mà các bạn đang sử dụng để download tập tin execution của Protocol Buffer Compiler phù hợp.

Cho mỗi version, các bạn sẽ thấy trên Maven Central Repository, rất nhiều các tập tin execution của Protocol Buffer Compiler được lưu trữ ở đây. Ví dụ, cho version của dependency protoc mà mình khai báo 3.25.4, nếu các bạn đi đến địa chỉ https://repo1.maven.org/maven2/com/google/protobuf/protoc/3.25.4/, các bạn sẽ thấy kết quả như sau:

Còn cho plugin gRPC Java Codegen cho Protocol Buffer Compiler thì mình sử dụng plugin parameter <pluginArtifact>. Format thì cũng tương tự như khi khai báo cho plugin parameter <protocArtifact> các bạn nhé!

Tương tự như dependency proc, các tập tin execution của plugin gPRC Java Codegen cũng được lưu trữ trên Maven Central Repository. Cho cấu hình ở trên của mình, nếu đi đến địa chỉ https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.66.0/, các bạn cũng sẽ thấy kết quả như sau:

Ở đây, mình cũng sử dụng một Maven plugin khác tên là os-maven-plugin để lấy thông tin về hệ điều hành, chip của máy tính mà chúng ta đang sử dụng để Protocol Buffers Maven Plugin có thể sử dụng đúng tập tin execution mà nó cần sử dụng.

Cho laptop Macbook M1 trở đi, các bạn cần install phần mềm Rosetta sử dụng command:

để tạo cầu nối thích nghi giữa chip xử lý Intel và Chip Apple Silicon mới của Apple, để có thể chạy được tập tin execution của Protocol Buffer Compiler các bạn nhé!

Có 2 goal của Protocol Buffers Maven Plugin mà các bạn cần phải sử dụng là compile và compile-custom. Goal compile sẽ sử dụng Protocol Buffer Compiler để generate các Java class cho các message được định nghĩa trong tập tin .proto còn goal compile-custom sẽ được sử dụng bởi các plugin mà các bạn khai báo cho Protocol Buffer Compiler. Tùy theo mục đích mà các plugin đó sẽ generate code Java dựa theo định nghĩa của tập tin .proto.

Mặc định thì Protocol Buffers Maven Plugin sẽ sử dụng các tập tin .proto có ở thư mục /src/main/proto để generate source code, nên bây giờ, nếu các bạn chạy Maven Compile “mvn compile”, các bạn sẽ thấy Protocol Buffers Maven Plugin generate các tập tin Java ở thư mục /target/generated-sources/protobuf như sau:

Thư mục grpc-java sẽ chứa Java code của service contract còn thư mục java sẽ chứa code Java của các gRPC message các bạn nhé!

Các bạn cũng cần khai báo thêm dependency javax.annnotation-api để project chúng ta có thể compile được:

Đến đây thì chúng ta đã hoàn thành việc sử dụng Protocol Buffers Maven Plugin để generate Java code cho service contract trong gRPC rồi đó các bạn!

Add Comment