如何部署vert.在运行时垂直于X ?



我的项目是由http://start.vertx.io

生成的my HTTP handler:

// ...
public void handle(RoutingContext ctx) {
String verticleName = ctx.queryParams().get("v");
ctx.vertx().deployVerticle(verticleName);
ctx.response().end();
}
// ...

但是报告错误

java.lang.RuntimeException: Resource not found: verticles/TestVerticle.java
at io.vertx.core.impl.verticle.CompilingClassLoader.<init>(CompilingClassLoader.java:68)
at io.vertx.core.impl.JavaVerticleFactory.createVerticle(JavaVerticleFactory.java:37)
at io.vertx.core.impl.VerticleManager.doDeployVerticle(VerticleManager.java:217)
at io.vertx.core.impl.VerticleManager.doDeployVerticle(VerticleManager.java:193)
at io.vertx.core.impl.VerticleManager.doDeployVerticle(VerticleManager.java:180)
at io.vertx.core.impl.VerticleManager.deployVerticle(VerticleManager.java:156)
at io.vertx.core.impl.VertxImpl.deployVerticle(VertxImpl.java:623)
at io.vertx.core.impl.VertxImpl.deployVerticle(VertxImpl.java:608)

默认情况下,垂直名称应该是一个具有无参数构造函数并实现垂直(或扩展其实现之一)的全限定类名。例如

package demo;
import io.vertx.core.AbstractVerticle;
public class MyVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
// ...
}
}

那么你可以这样做:

vertx.deployVerticle("demo.MyVerticle");

如果你想使用另一种机制,你可以创建一个自定义的VerticleFactory(https://vertx.io/docs/vertx-service-factory/java/)并使用你自己的逻辑。例如

package demo;
import io.vertx.core.Promise;
import io.vertx.core.Verticle;
import io.vertx.core.spi.VerticleFactory;
import java.util.concurrent.Callable;
public class CustomVerticleFactory implements VerticleFactory {
@Override
public String prefix() {
return "custom";
}
@Override
public void createVerticle(String verticleName, ClassLoader classLoader, Promise<Callable<Verticle>> promise) {
if (verticleName.equals("custom:x")) {
promise.complete(() -> new MyVerticle());
} else {
promise.fail("...");
}
}
}

加载到你的Vertx实例:

vertx.registerVerticleFactory(new CustomVerticleFactory());

然后你可以这样做:

vertx.deployVerticle("custom:x");

找到了正确的方法。我应该用-Xbootclasspath/a:.启动应用程序然后类装入器可以在.(工作目录)

找到java源文件(XXXVerticle.java)。

最新更新