首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scalapb with maven不生成任何grpc服务类

scalapb with maven不生成任何grpc服务类
EN

Stack Overflow用户
提问于 2019-11-28 16:58:36
回答 2查看 689关注 0票数 0

我正在尝试使用ScalaPB和Maven创建一个简单的gRPC服务。下面是我的目录结构:

代码语言:javascript
复制
├── main
│   ├── proto
│   │   └── simple.proto
│   ├── resources
│   └── scala
│       └── me
│           ├── protogrpc
│           │   └── services
│           │       └── Main.scala
│           
└── test
    └── scala

我的simlpe.proto是这样的:

代码语言:javascript
复制
syntax = "proto3";

package scalapb.protos;

service Greeter {
    rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
    string name = 1;
}

message HelloReply {
    string message = 1;
}

和pom.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>simple-grpc</artifactId>
    <groupId>me.protogrpc</groupId>
    <version>0.1-SNAPSHOT</version>

    <properties>
        <generated.sources.location>${project.build.directory}/generated-sources</generated.sources.location>
        <generated.sources.protobuf.location>${generated.sources.location}/protobuf</generated.sources.protobuf.location>
        <proto.files.location>${project.basedir}/proto</proto.files.location>
        <scalapb.version>0.9.6</scalapb.version>
        <scala.compat.version>2.12</scala.compat.version>
        <spec2.version>4.8.1</spec2.version>
    </properties>


    <dependencies>
        <dependency>
            <groupId>com.thesamet.scalapb</groupId>
            <artifactId>scalapb-runtime_${scala.compat.version}</artifactId>
            <version>${scalapb.version}</version>
        </dependency>
        <dependency>
            <groupId>com.thesamet.scalapb</groupId>
            <artifactId>scalapb-runtime-grpc_${scala.compat.version}</artifactId>
            <version>${scalapb.version}</version>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-netty-shaded</artifactId>
            <version>1.25.0</version>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-protobuf</artifactId>
            <version>1.25.0</version>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-stub</artifactId>
            <version>1.25.0</version>
        </dependency>
    </dependencies>

    <build>
           <sourceDirectory>src/main/scala</sourceDirectory>
           <!--<testSourceDirectory>src/test/scala</testSourceDirectory> -->
        <extensions>
            <extension>
                <groupId>kr.motd.maven</groupId>
                <artifactId>os-maven-plugin</artifactId>
                <version>1.6.0</version>
            </extension>
        </extensions>

        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>4.2.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                        <configuration>
                            <args>
                                <arg>-dependencyfile</arg>
                                <arg>${project.build.directory}/.scala_dependencies</arg>
                            </args>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.xolstice.maven.plugins</groupId>
                <artifactId>protobuf-maven-plugin</artifactId>
                <version>0.6.1</version>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>test-compile</goal>
                        </goals>
                        <configuration>
                            <protocArtifact>com.google.protobuf:protoc:3.8.0:exe:${os.detected.classifier}</protocArtifact>
                            <protocPlugins>
                                <protocPlugin>
                                    <id>scalapb</id>
                                    <groupId>com.thesamet.scalapb</groupId>
                                    <artifactId>scalapbc_${scala.compat.version}</artifactId>
                                    <version>${scalapb.version}</version>
                                    <mainClass>scalapb.scripts.ProtocGenScala</mainClass>
                                </protocPlugin>
                            </protocPlugins>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

当我执行mvn compilemvn scala:compile时,我可以看到除了与gRPC相关的任何类之外,protobuf类都是在目标目录中生成的。

代码语言:javascript
复制
├── generated-sources
│   └── protobuf
│       └── java
│           └── scalapb
│               └── protos
│                   ├── Simple.java
│                   └── simple
│                       ├── HelloReply.scala
│                       ├── HelloRequest.scala
│                       └── SimpleProto.scala

我错过了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2019-12-26 05:53:30

我更新了grpc示例,为ScalaPB生成代码。默认情况下,它不会这样做。

代码语言:javascript
复制
      <plugin>
          <groupId>com.github.os72</groupId>
          <artifactId>protoc-jar-maven-plugin</artifactId>
          <version>3.11.1</version>
          <executions>
              <execution>
                  <phase>generate-sources</phase>
                  <goals>
                      <goal>run</goal>
                  </goals>
              </execution>
          </executions>
          <configuration>
            <includeMavenTypes>transitive</includeMavenTypes>
            <outputTargets>
                <outputTarget>
                    <type>scalapb</type>
                    <outputOptions>grpc</outputOptions> <!-- more scalapb options can be added here -->
                    <pluginArtifact>com.thesamet.scalapb:protoc-gen-scala:0.9.6:sh:unix</pluginArtifact>
                </outputTarget>
            </outputTargets>
        </configuration>
      </plugin>

请参阅https://github.com/thesamet/scalapb-maven-example/blob/master/pom.xml

票数 1
EN

Stack Overflow用户

发布于 2019-12-05 08:29:43

您还需要在pom.xml文件中配置io.grpc:protoc-gen-grpc-java以运行gRPC proto代码生成插件。Example here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59085003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档