gpt4 book ai didi

java - 使用父进程类路径启动 Java 子进程

转载 作者:行者123 更新时间:2023-12-04 06:59:51 24 4
gpt4 key购买 nike

我想启动一个 java 子进程,与当前 java 进程具有相同的 java 类路径和动态加载的类。以下还不够,因为它不包含任何动态加载的类:

String classpath = System.getProperty("java.class.path");

目前我正在使用下面的代码搜索每个需要的类。但是,在某些机器上,这对于某些类/库失败,源变量为空。有没有更可靠、更简单的方法来获取当前 jvm 进程使用的库的位置?
String stax     = ClassFinder.classPath("javax.xml.stream.Location");

public static String classPath(String qualifiedClassName) throws NotFoundException {
try {
Class qc = Class.forName( qualifiedClassName );
CodeSource source = qc.getProtectionDomain().getCodeSource();
if ( source != null ) {
URL location = source.getLocation();
String f = location.getPath();
f = URLDecoder.decode(f, "UTF-8"); // decode URL to avoid spaces being replaced by %20
return f.substring(1);
} else {
throw new ClassFinder().new NotFoundException(qualifiedClassName+" (unknown source, likely rt.jar)");
}
} catch ( Exception e ) {
throw new ClassFinder().new NotFoundException(qualifiedClassName);
}
}

最佳答案

I want to launch a java subprocess, with the same java classpath and dynamically loaded classes as the current java process.



你的意思是调用一个新的JVM?

鉴于...
  • 可以将各种代理和工具插入到 JVM 中,以便在加载时转换类
  • 可以带 byte数组并将其转换为类
  • 可能有复杂的类加载器层次结构,在类之间具有不同的可见性,并且多次加载相同的类

  • ...没有通用的、神奇的、万能的和万无一失的方法来做到这一点。您应该设计您的应用程序及其类加载机制来实现此目标。如果您允许使用 3rd 方插件,则必须记录其工作原理以及他们必须如何注册其库。

    关于java - 使用父进程类路径启动 Java 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2050052/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com