Vert.x: сбой развертывания JavaScript Verticle из Java

Я хочу развернуть написанную на JavaScipt Verticle с Java. Но я всегда получаю ClassNotFoundErrorException - хотя путь правильный и ресурс vertx-lang-js добавлен.

Это моя JS-версия:

declare var vertx;    
var eb = new vertx.EventBus()
eb.consumer("cbweb.validation", (message:any) => {
    console.log(message);
});
console.log("Validation.js ready")

А вот мой Java-код для развертывания Verticle:

private static final String RELATIVE_PATH = "D:/Temp/vertxFtpClient/jslibs/jsftp/verticle.js";

public static void main(String[] args) throws InterruptedException {
    Vertx vertx = Vertx.vertx();
    vertx.deployVerticle(new BasicVerticle(), stringAsyncResult -> {
        System.out.println("BasicVerticle deployment complete");
    });


    vertx.deployVerticle(RELATIVE_PATH);

    vertx.close();

}

}

и вот как выглядит мой pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>de.vertex.ftp</groupId>
    <artifactId>VertexAdapter</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>
    <dependencies>
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-core</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-lang-js</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>VertexLearning</finalName>
    </build>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </properties>
</project>

Может чего-то не хватает?


person user3133542    schedule 21.06.2016    source источник


Ответы (1)


Если вы хотите использовать только JavaScript, вам вообще не нужно писать код Java. Все, что вам нужно, это добавить свой код js в src/main/resources (вы можете изменить это на что-то другое, но вам нужно будет настроить maven, чтобы не использовать его значения по умолчанию).

И используйте плагин maven shadow следующим образом:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>2.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>

И объявите переменную main.verticle с указанием пути к файлу js verticle относительно src/main/resource, например: jslibs/jsftp/verticle.js.

person Paulo Lopes    schedule 22.06.2016