通过webstart部署的My Java应用程序调用帮助应用程序。我想在一个单独的JVM中启动帮助应用程序,其中相同的类路径作为主应用程序。
如果没有 webstart,系统ClassLoader
会提供答案。 使用 webstart,系统ClassLoader
仅提供deploy.jar
的路径。
我找到了this,但似乎已经过时了。它引用内部API com.sun.deploy.cache.Cache
上的至少一个方法,该方法已从Java 8u60中消失。也许还有另一种方式。
答案 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()