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

时间:2015-11-09 18:40:33

标签: java classpath java-web-start

通过webstart部署的My Java应用程序调用帮助应用程序。我想在一个单独的JVM中启动帮助应用程序,其中相同的类路径作为主应用程序。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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文件。

答案 1 :(得分:0)

这是使用Java 8u66工作的(在Jython中)。显然,我更喜欢不依赖于内部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()