通过Eclipse运行Vert.x(带有ES4X)

时间:2019-06-28 14:45:35

标签: vert.x

此问题是针对以下问题的后续措施: Running Vuetify on Vert.x (w/ES4X)

我希望能够通过Eclipse(而非NPM)运行ES4X。我不确定是否可行或如何接线。

假设我有以下build.gradle.file

plugins {
  id 'java'
  id 'application'
  id 'com.johnrengleman.shadow' version "5.0.0"
}
sourceCompatibility='1.8'
mainClassName='io.vertx.core.Launcher'
repositories {
  mavenCentral() 
}
dependencies {
  implementation 'io.vertx:vertx-core:3.7.1'
  implementation 'io.vertx:vertx-web:3.7.1'
  implementation 'io.vertx:vertx-lang-js:3.7.1'
  // implementation 'io.reactiverse:es4x:0.8.0'
  // implementation 'io.reactiverse:es4x-pm:0.8.0'
}
processResources {
  from '/src/main/js'
}
shadowJar {
  classifier = 'fat'
  manifest {
    attributes 'Main-Verticle' : 'index.js'
  }
  mergeServiceFiles {
    include 'META-INF/services/io.vertx.core.spi.VerticleFactory'
  }
}

和我的src / main / js / index.js看起来像其他引用的文章中的一个:

import { Router, StaticHandler } from '@vertx/web';
const app = Router.router(vertx);
app.get().handler(StaticHandler.create("dist"));
vertx.createHttpServer().requestHandler(app).listen(8080);

如果我通过shadowJar创建可执行jar,则由于Nashorn阻塞index.js内容而导致javax.script.ScriptExceptions(如预期的那样)。

如果我在gradle构建中取消对es4x实现的注释,则会收到org.graalvm.polyglot.io.FileSystem的ClassNotFound异常

那么我如何正确修改此应用程序以利用ES4X?我猜想相当于“ es4x init”会做什么?

1 个答案:

答案 0 :(得分:2)

假设您在执行时拥有es4x应用程序和package.json

npm install

您将在node_modules中进入几个额外的文件夹:

.bin
.lib

.bin目录中,有一个es4x-launcher.jar文件,可用于从Eclipse启动应用程序。它将引用解压缩到.lib目录中的依赖项。为了使一切正常,应该在eclipse中使用运行npm install命令时使用的同一JVM。否则,您可能最终会丢失依赖项。在运行不需要graaljs依赖项的graalvm或在不需要jvmci依赖项的jdk8上运行时,就是这种情况。