Итак, я занимаюсь этим уже 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 достаточно, я все еще новичок в публикации:)
Благодарим за помощь и исправления!