繁体   English   中英

如何获取在 webstart 上运行的 Java 应用程序的类路径?

[英]How to get the classpath of a Java application running on webstart?

我通过 webstart 部署的 Java 应用程序调用了一个辅助应用程序。 我想在与主应用程序具有相同类路径的单独 JVM 中启动辅助应用程序。

在没有webstart 的情况下,系统ClassLoader提供了答案。 使用webstart,系统ClassLoader提供deploy.jar的路径。

我找到了这个,但它似乎已经过时了。 它指的是内部 API com.sun.deploy.cache.Cache上的至少一种方法,该方法已从 Java 8u60 中消失。 也许还有另一种方式。

很抱歉,但搜索缓存仅在未下载 jws 应用程序的新更新时才有效。 类路径将包含对具有旧版本和新版本的所有目录的引用。

为此,我使用了从 jws 应用程序调用的 C++-dll

HMODULE thisDll = GetModuleHandle(TEXT("MyDll.dll"));
    ::GetModuleFileName(thisDll, currentDir, sizeof(currentDir));
_splitpath(currentDir, Ldrive, Ldirpath, Lfname, Lext);
sprintf(currentDir,"%s%s",Ldrive,Ldirpath);

之后,我解析 currentDir 以查找所有 jar 文件。

这是(在 Jython 中)适用于 Java 8u66 的东西。 显然,我更喜欢不依赖于内部 API 的解决方案。 但是,也许那是不可用的。

import com.sun.deploy.cache.Cache as Cache
import traceback
classPath = []
for indexFile in Cache.getCacheEntries(False):
    try:
        cacheEntry = Cache.getCacheEntryFromFile(indexFile)
        jarFile = cacheEntry.getJarFile()
        if jarFile is not None:
            classPath.append(jarFile.getName())
    except:
        traceback.print_exc()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM