protoc-jar-maven-plugin

Protocol Buffers codegen plugin - based on protoc-jar executable JAR

Goals Overview

  • protoc-jar:run Compiles .proto files using protoc-jar embedded protoc compiler. Supports embedded protoc versions 2.4.1, 2.5.0, 2.6.1, 3.11.4, and any binaries (protoc and protoc plugins) available for download from maven central. Also supports pre-installed protoc binary

Usage

Typically used in following lifecycle phases:

  • generate-sources (main cycle, default)
  • generate-test-sources (test cycle)


Sample usage - compile in main cycle into target/generated-sources, add generated sources to project, use default protoc version and default src/main/protobuf source folder

<plugin>
        <groupId>com.github.os72</groupId>
        <artifactId>protoc-jar-maven-plugin</artifactId>
        <version>3.11.4</version>
        <executions>
                <execution>
                        <phase>generate-sources</phase>
                        <goals>
                                <goal>run</goal>
                        </goals>
                </execution>
        </executions>
</plugin>


Sample usage - compile in main cycle into target/generated-sources, add generated sources to project, add all .proto sources to generated jar, include .proto files from direct maven dependencies, include additional imports

<plugin>
        <groupId>com.github.os72</groupId>
        <artifactId>protoc-jar-maven-plugin</artifactId>
        <version>3.11.4</version>
        <executions>
                <execution>
                        <phase>generate-sources</phase>
                        <goals>
                                <goal>run</goal>
                        </goals>
                        <configuration>
                                <addProtoSources>all</addProtoSources>
                                <includeMavenTypes>direct</includeMavenTypes>
                                <includeDirectories>
                                        <include>src/main/more_proto_imports</include>
                                </includeDirectories>
                                <inputDirectories>
                                        <include>src/main/protobuf</include>
                                </inputDirectories>
                        </configuration>
                </execution>
        </executions>
</plugin>


Sample usage - download protoc and plugin binaries from maven repo, multiple output targets (example: gRPC)

<plugin>
        <groupId>com.github.os72</groupId>
        <artifactId>protoc-jar-maven-plugin</artifactId>
        <version>3.11.4</version>
        <executions>
                <execution>
                        <phase>generate-sources</phase>
                        <goals>
                                <goal>run</goal>
                        </goals>
                        <configuration>
                                <protocArtifact>com.google.protobuf:protoc:3.0.0</protocArtifact>
                                <inputDirectories>
                                        <include>src/main/resources</include>
                                </inputDirectories>
                                <outputTargets>
                                        <outputTarget>
                                                <type>java</type>
                                        </outputTarget>
                                        <outputTarget>
                                                <type>grpc-java</type>
                                                <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.1</pluginArtifact>
                                        </outputTarget>
                                </outputTargets>
                        </configuration>
                </execution>
        </executions>
</plugin>


Sample usage - javalite, multiple output targets:

<plugin>
        <groupId>com.github.os72</groupId>
        <artifactId>protoc-jar-maven-plugin</artifactId>
        <version>3.11.4</version>
        <executions>
                <execution>
                        <phase>generate-sources</phase>
                        <goals>
                                <goal>run</goal>
                        </goals>
                        <configuration>
                                <inputDirectories>
                                        <include>src/main/resources</include>
                                </inputDirectories>
                                <outputTargets>
                                        <outputTarget>
                                                <type>java</type>
                                                <outputOptions>lite</outputOptions>
                                        </outputTarget>
                                        <outputTarget>
                                                <type>python</type>
                                                <outputOptions>lite</outputOptions>
                                        </outputTarget>
                                </outputTargets>
                        </configuration>
                </execution>
        </executions>
</plugin>


Sample usage - compile in main cycle into src/main/java, don't alter project

<plugin>
        <groupId>com.github.os72</groupId>
        <artifactId>protoc-jar-maven-plugin</artifactId>
        <version>3.11.4</version>
        <executions>
                <execution>
                        <phase>generate-sources</phase>
                        <goals>
                                <goal>run</goal>
                        </goals>
                        <configuration>
                                <protocVersion>2.4.1</protocVersion>
                                <addSources>none</addSources>
                                <outputDirectory>src/main/java</outputDirectory>
                                <inputDirectories>
                                        <include>src/main/protobuf</include>
                                </inputDirectories>
                        </configuration>
                </execution>
        </executions>
</plugin>


Sample usage - compile in test cycle into src/test/java, don't alter project

<plugin>
        <groupId>com.github.os72</groupId>
        <artifactId>protoc-jar-maven-plugin</artifactId>
        <version>3.11.4</version>
        <executions>
                <execution>
                        <phase>generate-test-sources</phase>
                        <goals>
                                <goal>run</goal>
                        </goals>
                        <configuration>
                                <protocVersion>2.4.1</protocVersion>
                                <addSources>none</addSources>
                                <outputDirectory>src/test/java</outputDirectory>
                                <inputDirectories>
                                        <include>src/test/protobuf</include>
                                </inputDirectories>
                        </configuration>
                </execution>
        </executions>
</plugin>


Sample usage - generate python, don't alter project

<plugin>
        <groupId>com.github.os72</groupId>
        <artifactId>protoc-jar-maven-plugin</artifactId>
        <version>3.11.4</version>
        <executions>
                <execution>
                        <phase>generate-sources</phase>
                        <goals>
                                <goal>run</goal>
                        </goals>
                        <configuration>
                                <protocVersion>2.4.1</protocVersion>
                                <type>python</type>
                                <addSources>none</addSources>
                                <outputDirectory>src/main/python</outputDirectory>
                                <inputDirectories>
                                        <include>src/main/protobuf</include>
                                </inputDirectories>
                        </configuration>
                </execution>
        </executions>
</plugin>


Sample usage - compile in test cycle, multiple output targets

<plugin>
        <groupId>com.github.os72</groupId>
        <artifactId>protoc-jar-maven-plugin</artifactId>
        <version>3.11.4</version>
        <executions>
                <execution>
                        <phase>generate-test-sources</phase>
                        <goals>
                                <goal>run</goal>
                        </goals>
                        <configuration>
                                <protocVersion>2.4.1</protocVersion>
                                <inputDirectories>
                                        <include>src/test/resources</include>
                                </inputDirectories>
                                <outputTargets>
                                        <outputTarget>
                                                <type>java</type>
                                                <addSources>none</addSources>
                                                <outputDirectory>src/test/java</outputDirectory>
                                        </outputTarget>
                                        <outputTarget>
                                                <type>descriptor</type>
                                                <addSources>none</addSources>
                                                <outputDirectory>src/test/resources</outputDirectory>
                                        </outputTarget>
                                </outputTargets>
                        </configuration>
                </execution>
        </executions>
</plugin>


Sample usage - generate java shaded for use with protobuf-java-shaded-241, don't alter project

<plugin>
        <groupId>com.github.os72</groupId>
        <artifactId>protoc-jar-maven-plugin</artifactId>
        <version>3.11.4</version>
        <executions>
                <execution>
                        <phase>generate-sources</phase>
                        <goals>
                                <goal>run</goal>
                        </goals>
                        <configuration>
                                <protocVersion>2.4.1</protocVersion>
                                <type>java-shaded</type>
                                <addSources>none</addSources>
                                <outputDirectory>src/main/java</outputDirectory>
                                <inputDirectories>
                                        <include>src/main/protobuf</include>
                                </inputDirectories>
                        </configuration>
                </execution>
        </executions>
</plugin>