首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Vert.x JavaScript动态加载JAR文件?

如何使用Vert.x JavaScript动态加载JAR文件?
EN

Stack Overflow用户
提问于 2020-02-28 08:46:28
回答 2查看 240关注 0票数 0

使用Vert.x JavaScript (3.8.4),我希望动态地在运行时加载JAR文件。这是必要的,因为在启动Vert.x应用程序时,该文件可能不存在。理想情况下,我希望能够使用这样的代码:

代码语言:javascript
复制
// load custom JAR file
requireJar("path/to/dynamic.jar");
// use class from dynamically loaded package
var instance = new com.mydynamicpackage.MyCustomClass();

我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-28 12:57:40

基于this答案,我创建了以下JavaScript函数,用于从JAR文件动态加载类:

代码语言:javascript
复制
var requireJavaClass=(function(){
    var method=java.net.URLClassLoader.class.getDeclaredMethod("addURL",java.net.URL.class);
    method.setAccessible(true);
    var cache={};
    var ClassLoader=java.lang.ClassLoader;
    var File=java.io.File;
    return function(classname,jarpath){
        var c=cache[classname];
        if (c) return c;
        if (jarpath) {
            var cl=ClassLoader.getSystemClassLoader();
            method.invoke(cl,new File(jarpath).toURI().toURL());
            cl.loadClass(classname);
        }
        return cache[classname]=Java.type(classname);
    }
})();

与我在问题中发布的片段相同的是:

代码语言:javascript
复制
var MyCustomClass=requireJavaClass("com.mydynamicpackage.MyCustomClass","path/to/dynamic.jar");
var instance = new MyCustomClass();

到目前为止,我只在运行在JRE8中的 Vert.x 3.8.5上测试过这一点,也就是说,我不能说这是否也适用于较早的Vert.x版本或JRE9+。

票数 0
EN

Stack Overflow用户

发布于 2020-02-28 10:14:42

你可能会发现这个答案很有帮助:

How to access external JAR files from JavaScript using Rhino and Eclipse?

另一种有效的方法是为jar提供其他方法,即不通过javascript实现进行检查,之后检查是否可用,如果没有,则进行处理。

代码语言:javascript
复制
    java.lang.Class.forName( 'com.mydynamicpackage.MyCustomClass' )

如果MyCustomClass不存在,这将引发错误。

如果无法确定jars是从不可信的源加载的,那么在运行时加载jars可能不是一个好主意。至少对于java世界来说是这样的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60448092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档