компиляция grpc с помощью многомодульного приложения maven

Моя архитектура выглядит следующим образом.

Два сервера

moduleA / src / main / resources / fileA.proto

moduleB / src / main / resources / fileB .proto

Клиент (оконечная точка сервера, обращенная к браузеру, вызывающая над двумя серверами)

service / src / main

Проблема / вопрос: В моем модуле A изначально есть следующий POM, но он не генерирует заглушки.

<dependencies>
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>3.6.1</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.15.1</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-protobuf</artifactId>
        <version>1.15.1</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-stub</artifactId>
        <version>1.15.1</version>
    </dependency>
</dependencies>

<build>
    <extensions>
        <extension>
            <groupId>kr.motd.maven</groupId>
            <artifactId>os-maven-plugin</artifactId>
            <version>1.5.0.Final</version>
        </extension>
    </extensions>
    <plugins>
        <plugin>
            <groupId>org.xolstice.maven.plugins</groupId>
            <artifactId>protobuf-maven-plugin</artifactId>
            <version>0.5.1</version>
            <configuration>
                <protocArtifact>com.google.protobuf:protoc:3.9.0:exe:${os.detected.classifier}</protocArtifact>
                <pluginId>grpc-java</pluginId>
                <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.22.1:exe:${os.detected.classifier}</pluginArtifact>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>compile-custom</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

person AppDeveloper    schedule 08.08.2019    source источник


Ответы (1)


расположение файла proto должно быть src/main/proto/. Кроме того, версия protobuf не похожа на соответствующую. в зависимости, версия protobuf - 3.6.1, а плагин protoc использует 3.9.0.

person creamsoup    schedule 09.08.2019
comment
быстрый вопрос, если вы не возражаете, какова правильная архитектура для совместного использования прото-файла между двумя отдельными модулями (или микросервисами, или банками), оба должны быть развернуты на разных машинах, возможно, скомпилировать оба модуля на одном компьютере или, возможно, скомпилировать клиент на другом компьютере после развертывания сервера, какова отраслевая практика совместного использования IDL между ними, копировать ли прото-файл между модулями и повторно генерировать java-код, просто пытаясь погрузиться в командную работу в реальной жизни сценарии. - person AppDeveloper; 10.08.2019
comment
Мне также кажется, что мне, возможно, придется зависеть от файла jar сервера, ссылаться на него и вызывать методы с использованием реализации, пытаясь выяснить, как клиент может получить доступ к классам сервера? - person AppDeveloper; 10.08.2019
comment
Совместное использование прототипов файлов @AppDeveloper довольно сложно, у некоторых компаний нет этой проблемы, потому что они используют монорепозиторий, например Google. Эти вопросы возникают часто, но пока что это не лучшее решение. - person creamsoup; 12.08.2019