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

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

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

没有 webstart,系统ClassLoader提供了答案。 使用 webstart,系统ClassLoader仅提供到deploy.jar的路径。

我找到了 this,但它似乎已经过时了。它指的是内部 API com.sun.deploy.cache.Cache 上的至少一种方法,此后已从 Java 8u60 中消失。或许还有别的办法。

这是(在 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()

很抱歉,只要未下载 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 文件。