Ошибка компиляции прокси-сервера службы Vertx Не может быть определена как тип - PullRequest
1 голос
/ 27 мая 2020

Я работаю с сервисным прокси vertx. Пока пытаюсь добавить все необходимые зависимости и файл с информацией о пакете java. Я по-прежнему получаю сообщение об ошибке компиляции vertx, которое невозможно преобразовать в тип. Из учебника я узнал, что это сгенерированный файл, но он не генерируется.

Пом. xml выглядит следующим образом:

<modelVersion>4.0.0</modelVersion>
<groupId>io.vertx.starter</groupId>
<artifactId>vertx-start-project</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<vertx.version>3.8.3</vertx.version>
<main.verticle>io.vertx.starter.MainVerticle</main.verticle>
</properties>

<dependencyManagement>
<dependencies>
  <dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-stack-depchain</artifactId>
    <version>${vertx.version}</version>
    <type>pom</type>
    <scope>import</scope>
  </dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-core</artifactId>
</dependency>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-unit</artifactId>
  <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-web</artifactId>
</dependency>
<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-web-templ-freemarker</artifactId>
</dependency>
<dependency>
    <groupId>com.github.rjeschke</groupId>
    <artifactId>txtmark</artifactId>
    <version>0.13</version>
</dependency>
<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-jdbc-client</artifactId>
</dependency>
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.3.4</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>   
<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-service-proxy</artifactId>
</dependency>
<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-codegen</artifactId>
    <scope>provided</scope>
   </dependency>
  </dependencies>

 <build>
<pluginManagement>
  <plugins>
    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.5.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>

        <annotationProcessors>
        <annotationProcessor>io.vertx.codegen.CodeGenProcessor</annotationProcessor>
        </annotationProcessors>
        <generatedSourcesDirectory>${project.basedir}/src/main/generated</generatedSourcesDirectory>
        <compilerArgs>
            <arg>-AoutputDirectory=${project.basedir}/src/main</arg>
        </compilerArgs>
      </configuration>
    </plugin>
    <!-- tag::clean[] -->
    <plugin>
      <artifactId>maven-clean-plugin</artifactId>
      <version>3.0.0</version>
      <configuration>
        <filesets>
          <fileset>
            <directory>${project.basedir}/src/main/generated</directory>
          </fileset>
        </filesets>
      </configuration>
    </plugin>
    <!-- end::clean[] -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-deploy-plugin</artifactId>
      <version>2.8.2</version>
      <configuration>
        <skip>true</skip>
      </configuration>
    </plugin>
    </plugins>
</pluginManagement>

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.3</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <manifestEntries>
                <Main-Class>io.vertx.core.Launcher</Main-Class>
                <Main-Verticle>${main.verticle}</Main-Verticle>
              </manifestEntries>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
              <resource>META-INF/services/io.vertx.core.spi.VerticleFactory</resource>
            </transformer>
          </transformers>
          <artifactSet>
          </artifactSet>
          <outputFile>${project.build.directory}/${project.artifactId}-${project.version}-fat.jar</outputFile>
        </configuration>
      </execution>
    </executions>
  </plugin>

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.5.0</version>
    <configuration>
      <mainClass>io.vertx.core.Launcher</mainClass>
      <arguments>
        <argument>run</argument>
        <argument>${main.verticle}</argument>
      </arguments>
    </configuration>
  </plugin>
</plugins>

Интерфейс службы базы данных выглядит следующим образом:

  @VertxGen
  @ProxyGen
  public interface WikiDatabaseService {

@Fluent
WikiDatabaseService fetchAllPages(Handler<AsyncResult<JsonArray>> resultHandler);

@Fluent
WikiDatabaseService fetchPage(String name, Handler<AsyncResult<JsonObject>> resultHandler);

@Fluent
WikiDatabaseService createPage(String title, String markdown, Handler<AsyncResult<Void>> resultHandler);

@Fluent
WikiDatabaseService savePage(int id, String markdown, Handler<AsyncResult<Void>> resultHandler);

@Fluent
WikiDatabaseService deletePage(int id, Handler<AsyncResult<Void>> resultHandler);

@GenIgnore
static WikiDatabaseService create(JDBCClient dbClient, HashMap <SqlQuery, String> sqlQueries, Handler<AsyncResult<WikiDatabaseService>> readyHandler) {
    return new WikiDatabaseServiceImpl(dbClient, sqlQueries, readyHandler);
}

@GenIgnore
static WikiDatabaseService createProxy(Vertx vertx, String address) {
return new WikiDatabaseServiceVertxEBProxy(vertx, address);
}

 }

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

 @ModuleGen(groupPackage = "io.vertx.starter.database", name = "starter-database")
 package io.vertx.starter.database;

 import io.vertx.codegen.annotations.ModuleGen;

1 Ответ

0 голосов
/ 09 июня 2020

Если вы используете Eclipse в качестве IDE для разработки проекта Vert.X, который использует прокси-серверы служб, вам нужно сделать еще несколько вещей, чтобы иметь возможность генерировать код:

1) Прокомментируйте эти строки в своем WikiDatabaseService interface:

@GenIgnore
static WikiDatabaseService createProxy(Vertx vertx, String address) {
return new WikiDatabaseServiceVertxEBProxy(vertx, address);
}

2) Щелкните правой кнопкой мыши проект Vert.X в Project Explorer, выберите Build Path > Configure Build Path 2.1) Выберите Вкладка «Источник» (убедитесь, что Java Путь сборки выбран на левой боковой панели) 2.2) Нажмите Добавить папку 2.3) Убедитесь, что папка сгенерированная отмечена в src / main / 2.4) Нажмите ОК, а затем Применить / Применить и закрыть 3) В терминале / cmd (в зависимости от используемой вами ОС) внутри папки проекта Vert.X выполните следующую команду: mvn clean package -> эту команду необходимо выполнять как Генерация кода должна выполняться для прокси-классов для правильной работы кода. 4) Раскомментируйте код на шаге 1) и снова выполните команду run mvn clean package. 5) Попробуйте запустить свой код сейчас, выполнив java -jar ./target/name_of_project-fat.jar (в вашем случае это должно быть java -jar ./target/vertx-start-project-fat.jar) ORR sh ./redeploy.sh ( на Linux)

Причина в том, что Eclipse, в отличие от IntellIJ IDEA, не выбирает сгенерированную папку под CLASSPATH, как указано здесь , где указано:

Обратите внимание, что сгенерированный код помещается в src / main / generated, который некоторые интегрированные среды разработки, такие как IntelliJ IDEA, автоматически выбирают из пути к классам.

Надеюсь, это поможет.

...