blackrock / protoc-jar-maven-plugin

Maven plugin to compile protobuf proto files into java source code
Apache License 2.0
9 stars 3 forks source link

protoc-jar-maven-plugin

Simple maven plugin to compile .proto files into protobuf code using protoc-jar embedded protoc compiler (multi-platform executable protoc JAR).

Provides some portability across the major platforms (Linux, Mac/OSX, and Windows).

Supports embedded protoc versions 2.4.1, 2.5.0, 2.6.1, 3.11.4, 3.25.1, and any binaries (protoc and protoc plugins) available for download from maven central. Also supports pre-installed protoc binary.

Installation

Usage

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>io.github.blackrock</groupId>
    <artifactId>protoc-maven-plugin</artifactId>
    <version>2.0.0</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>io.github.blackrock</groupId>
    <artifactId>protoc-maven-plugin</artifactId>
    <version>2.0.0</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>io.github.blackrock</groupId>
    <artifactId>protoc-maven-plugin</artifactId>
    <version>2.0.0</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>io.github.blackrock</groupId>
    <artifactId>protoc-maven-plugin</artifactId>
    <version>2.0.0</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 test cycle, multiple output targets, don't alter project (<addSources>: none):

<plugin>
    <groupId>io.github.blackrock</groupId>
    <artifactId>protoc-maven-plugin</artifactId>
    <version>2.0.0</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>

Contributing

Contributing

Code of conduct

Support

Service Level Agreement

Contact

GitHub Issues: https://github.com/blackrock/protoc-jar-maven-plugin/issues

Copyright © 2017-2024 os72, licensed under Apache License, Version 2.0.

Copyright © 2024 BlackRock, Inc. Distributed under the Apache License, Version 2.0.

Forked from https://github.com/os72/protoc-jar-maven-plugin and https://github.com/os72/protoc-jar