Как создать заглушки из протокола gRP C с помощью maven в многопакетном проекте - PullRequest
0 голосов
/ 13 марта 2020

Итак, я занимаюсь этим уже 2 дня, я искал в Интернете несколько часов и не могу найти решение этой проблемы.

Это моя структура кода:

.
├── client
│   ├── pom.xml -> **client pom.xml**
│   └── src
│       ├── main
│       │   └── java
│       │       └── pt
│       │           └── ulisboa
│       │               └── tecnico
│       │                   └── sec
│       │                       └── server
│       │                           ├── App.java
│                                   └── HelloClient.java
├── library
│   ├── pom.xml -> **library pom.xml**
│   └── src
│       └── main
│           └── proto
│               └── HelloWorld.proto
├── pom.xml -> **parent pom.xml**
├── server
│   ├── pom.xml -> **server pom.xml**
│   ├── server.iml
│   └── src
│       ├── main
│       │   └── java
│       │       └── pt
│       │           └── ulisboa
│       │               └── tecnico
│       │                   └── sec
│       │                       └── server
│       │                           ├── App.java
│       │                           └── HelloServer.java

В настоящее время у меня есть модуль библиотеки, генерирующий заглушки, но они остаются в pt.ulisboa.tecnico.se c .library.target.generated-sources, но я не могу получить к ним доступ ни на одном из серверов или клиент.

родительский pom. xml выглядит примерно так:

<groupId>pt.ulisboa.tecnico.sec</groupId>
<artifactId>hdas</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>

<name>${project.artifactId}</name>

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.7</maven.compiler.source>
  <maven.compiler.target>1.7</maven.compiler.target>
  <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
</properties>

  <dependencies>
        <!-- JUnit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
        <plugins>
            <!-- To run the comand mvn exec:java -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <configuration>
                    <!--<executable>java</executable>
                    <arguments>
                        <argument></argument>
                        <argument>myproject:dist</argument>
                        ...
                    </arguments>-->
                    <!--<mainClass>App</mainClass>-->

                </configuration>
            </plugin>
      ...
      </plugins>
  </build>

    <modules>
        <module>library</module>
        <module>server</module>
        <module>client</module>
    </modules>
</project>

Библиотека pom. xml выглядит примерно так:

<parent>
        <artifactId>hdas</artifactId>
        <groupId>pt.ulisboa.tecnico.sec</groupId>
        <version>1.0-SNAPSHOT</version>
</parent>


<artifactId>library</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>${project.artifactId}</name>



<dependencies>
  <dependency>
    <groupId>io.grpc</groupId>
      <artifactId>grpc-all</artifactId>
      <version>1.27.0</version>
   </dependency>
</dependencies>

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

Сервер pom. xml выглядит примерно так:

<parent>
  <artifactId>hdas</artifactId>
  <groupId>pt.ulisboa.tecnico.sec</groupId>
  <version>1.0-SNAPSHOT</version>
</parent>


<!--<groupId>pt.ulisboa.tecnico.sec</groupId>-->

    <artifactId>server</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

  <name>${project.artifactId}</name>


  <properties>
      <!-- compiler properties -->
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>

      <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>

      <!-- application properties -->
      <mainclass>pt.ulisboa.tecnico.sec.server.HelloServer</mainclass>

      <server.port>8080</server.port>
  </properties>

  <dependencies>
    <!-- contract brings gRPC dependencies with it -->
    <dependency>
       <groupId>pt.ulisboa.tecnico.sec</groupId>
        <artifactId>library</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

      <dependency>
          <groupId>io.grpc</groupId>
          <artifactId>grpc-all</artifactId>
          <version>1.27.0</version>
      </dependency>

    <!-- JUnit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement>
      <plugins>
          <!-- Plugin that provides two goals to execute system and Java programs -->
          <plugin>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>exec-maven-plugin</artifactId>
              <version>${exec-maven-plugin.version}</version>
              <executions>
                  <execution>
                      <goals>
                          <goal>java</goal>
                      </goals>
                  </execution>
              </executions>
              <configuration>
                  <!-- to prevent deprecation warning: -->
                  <killAfter>-1</killAfter>
                  <mainClass>${mainclass}</mainClass>
                  <arguments>
                      <argument>${server.port}</argument>
                  </arguments>
              </configuration>
          </plugin>
     </plugins>
    </pluginManagement>
  </build>
</project>

Клиент очень похож на сервер.

Как мне заставить это работать ??

Я попробовал простой привет мир от Google, но, поскольку они не являются разными пакетами, существует ServiceImpl, который появляется рядом с Client и Server (я при условии, что именно поэтому).

Запуск path-to-proj/library$ mvn clean install работает довольно хорошо и генерирует нужный код, как указано выше, но каждый раз, когда я пытаюсь скомпилировать и запустить Сервер , он говорит cannot find symbol -> он не распознает объект, который предположительно был сгенерирован ранее.

В данный момент я работаю с gRP C hello world, но пытаюсь адаптировать его к многомодульной системе.

Извините, если кода слишком много или не указано c достаточно, я все еще новичок в публикации:)

Благодарим за помощь и исправления!

...