如何使用 Maven 从 protobuf 为 Java 目标 11 生成 java 存根?

How to generate java stubs from protobuf for Java target 11 using maven?

我正在尝试使用 protobuf 生成存根。 我的 pom.xml 有以下代码

     <plugin>
          <groupId>com.github.os72</groupId>
          <artifactId>protoc-jar-maven-plugin</artifactId>
          <version>3.8.0</version>
          <executions>
            <execution>
              <phase>generate-sources</phase>
              <goals>
                <goal>run</goal>
              </goals>
              <configuration>
                <protocVersion>3.8.0</protocVersion>
                <includeStdTypes>true</includeStdTypes>
                <inputDirectories>
                  <include>src/main/proto</include>
                </inputDirectories>
                <outputTargets>
                  <outputTarget>
                    <type>java</type>
                  </outputTarget>
                    <outputTarget>
                    <type>grpc-java</type>
                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.24.0</pluginArtifact>
                    </outputTarget>
                </outputTargets>
              </configuration>
            </execution>
          </executions>
      </plugin>

然而,它生成目标为 Java1.8.

的源文件

我正在将我的应用程序迁移到 Java 11,并在 pom.xml 文件中包含以下 jar:

<dependency>
    <groupId>com.sun.activation</groupId>
    <artifactId>javax.activation</artifactId>
    <version>1.2.0</version>
</dependency>
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.activation-api</artifactId>
    <version>1.3.2</version>
</dependency>

但是 Maven protoc 插件生成的文件 Grpc.java 带有注释 javax.annotation.Generated 而不是 javax.annotation.api.Generated

是否有任何其他方法可以生成目标版本为 JDK 11.

的 java 存根

如果您遵循 grpc-java documentation,它会指示您使用:

<dependency> <!-- necessary for Java 9+ -->
  <groupId>org.apache.tomcat</groupId>
  <artifactId>annotations-api</artifactId>
  <version>6.0.53</version>
  <scope>provided</scope>
</dependency>

示例的先前版本使用 javax.annotation:javax.annotation-api:1.2,它确实有效,但出于许可原因,它被替换为 Tomcat。在您的 pom.xml 中,您似乎混淆了“激活”与“注释”,乍一看非常相似。

我不知道 javax.annotation.api.Generated 注释。我还没有看到任何真正的证据表明 javax.annotation.processing.Generatedjavax.annotation.Generated 的合适替代品。