gpt4 book ai didi

由 ClassLoader 锁定的 Java JAR 文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:52 25 4
gpt4 key购买 nike

我正在临时文件夹中提取 WAR,并将所有类和库添加到 URLClassLoader

当我开始将类加载到类路径中时,“WEB-INF/lib/”下的 JAR 文件被 JVM 锁定。

完成工作后,我关闭类路径,调用 GC 并删除临时目录。

删除临时目录时,可以删除“WEB-INF/lib”下除JAR文件之外的所有文件。

我的代码:

@Override
public void generateRegressionTestClasses(Path fileJARorWarSolution, List<String> canonicalNameClassesToGenerateTests) throws Exception {

Path tempPath = null;
URLClassLoader classLoader = null;
TryTest tryTest = null;
RDP execution = null;
try {
// This extracts the JAR/WAR and prepares the URLClassLoader.
GenFilterResponse response = genFilterClass.runGenFilterClass(path);

classLoader = response.getCl();
tempPath = response.getTempPath();

// Verify that all the Test classes is in the ClassLoader.
// Here is where the JAR files are locked.
for (String s : canonicalNameClassesToGenerateTests) {
try {
classLoader.loadClass(s);
} catch (ClassNotFoundException e) {
throw new CustomException(CustomTexts.ERROR_CLASS_NOT_LOADED + s);
}
}

execution = new RDP();
execution.setClassLoader(classLoader);

TryTest = new TryTest(execution);
tryTest.handle(null);
} finally {
tryTest = null;
execution = null;
if (classLoader != null) {
try {
classLoader.close();
} catch (Exception e) {
//
} finally {
classLoader = null;
System.gc();
}
}
if (tempPath != null) {
FileSystemUtils.deleteRecursively(tempPath.toFile());
}
}

有人知道如何解锁这些文件吗?

最佳答案

已解决。

如果我使用这种 URI 将 JAR 加载到类加载器中:

new URL("jar:file:" + jar.toAbsolutePath().toString() + "!/").toURI().toURL()

示例 URI:

jar:文件:c:/myJar.jar

类加载器关闭后文件被锁定。

如果我使用这种 URI 将 JAR 加载到类加载器中:

warDirectory.toFile().toURI().toURL()

示例 URI:

文件:c:/myJar.jar

当类加载器关闭时,我可以删除 JAR。

关于由 ClassLoader 锁定的 Java JAR 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48749685/

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