Я следую этому руководству по GRPC, моя проблема в том, что когда я запускаю " mvn protobuf: compile "файлы создаются в целевой папке, я не уверен, как сгенерировать код для java-каталога, вот мой файл POM

<dependencies>
    <!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util -->
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java-util</artifactId>
        <version>4.0.0-rc-2</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.33.1</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-protobuf</artifactId>
        <version>1.33.1</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-stub</artifactId>
        <version>1.33.1</version>
    </dependency>
    <dependency> <!-- necessary for Java 9+ -->
        <groupId>org.apache.tomcat</groupId>
        <artifactId>annotations-api</artifactId>
        <version>6.0.53</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

    <build>
        <extensions>
            <extension>
                <groupId>kr.motd.maven</groupId>
                <artifactId>os-maven-plugin</artifactId>
                <version>1.6.2</version>
            </extension>
        </extensions>
        <plugins>
            <plugin>
                <groupId>org.xolstice.maven.plugins</groupId>
                <artifactId>protobuf-maven-plugin</artifactId>
                <version>0.6.1</version>
                <configuration>
                    <protocArtifact>com.google.protobuf:protoc:3.12.0:exe:${os.detected.classifier}</protocArtifact>
                    <pluginId>grpc-java</pluginId>
                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.33.1:exe:${os.detected.classifier}</pluginArtifact>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>compile-custom</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

А вот мой прототип файл,

Вот мои вопросы,

1- The sources are generated in the target folder, I can import them just fine but why in Google docs it shows in the main/java/io..etc folder?
2- stubs like RouteGuideBlockingStub are not getting generated with mvn protobuf:compile, should I be using something else?
-1
ZKA 22 Ноя 2020 в 06:34

2 ответа

Лучший ответ

Сгенерированные источники на самом деле не так полезны, если вы не хотите распространять свой код как библиотеку с доступным исходным кодом. Сгенерированных классов более чем достаточно для работы с GRPC. И проект строится быстрее.

protobuf-maven-plugin можно настроить для использования пути по вашему выбору для сгенерированных классов через outputDirectory в разделе конфигурации плагина.

Только не кладите их в папку с исходными текстами.

protobuf:compile даст вам только определения protobuf. Чтобы получить заглушки grpc, вам нужна цель compile-custom, как указано в сборке.

Обычно нет необходимости вызывать их по отдельности, просто скомпилируйте весь проект и все в порядке.

0
tentacle 22 Ноя 2020 в 08:56

Как уже упоминалось в другом ответе об ограничениях структуры каталогов для прото-файлов, вот как вы должны настроить файл pom.xml для компиляции и размещения ваших сгенерированных классов в ваших файлах классов java.

Следующие зависимости необходимы для компиляции и генерации необходимых файлов классов.

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.33.1</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-protobuf</artifactId>
        <version>1.33.1</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-stub</artifactId>
        <version>1.33.1</version>
    </dependency>
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>3.14.0</version>
    </dependency>
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java-util</artifactId>
        <version>3.14.0</version>
    </dependency>

Вам также понадобятся следующие 2 плагина:

<build>
  ...
  <plugins>
    ...
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <execution>
                        <id>test</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>${basedir}/target/generated-sources</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.xolstice.maven.plugins</groupId>
                <artifactId>protobuf-maven-plugin</artifactId>
                <version>0.6.1</version>
                <configuration>
                    <protocArtifact>com.google.protobuf:protoc:3.11.0:exe:${os.detected.classifier}</protocArtifact>
                    <pluginId>grpc-java</pluginId>
                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.27.2:exe:${os.detected.classifier}</pluginArtifact>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>compile-custom</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
0
Jude Niroshan 22 Ноя 2020 в 08:28
64950415