Merge pull request #11121 from hanyong
* gh-11121: Polish "Support nested jar paths in loader.path" Support nested jar paths in loader.path
This commit is contained in:
commit
5510b5edab
|
@ -121,6 +121,8 @@ public class PropertiesLauncher extends Launcher {
|
||||||
|
|
||||||
private static final Pattern WORD_SEPARATOR = Pattern.compile("\\W+");
|
private static final Pattern WORD_SEPARATOR = Pattern.compile("\\W+");
|
||||||
|
|
||||||
|
private static final String NESTED_ARCHIVE_SEPARATOR = "!" + File.separator;
|
||||||
|
|
||||||
private final File home;
|
private final File home;
|
||||||
|
|
||||||
private List<String> paths = new ArrayList<>();
|
private List<String> paths = new ArrayList<>();
|
||||||
|
@ -452,6 +454,7 @@ public class PropertiesLauncher extends Launcher {
|
||||||
|
|
||||||
private List<Archive> getClassPathArchives(String path) throws Exception {
|
private List<Archive> getClassPathArchives(String path) throws Exception {
|
||||||
String root = cleanupPath(stripFileUrlPrefix(path));
|
String root = cleanupPath(stripFileUrlPrefix(path));
|
||||||
|
System.out.println(root);
|
||||||
List<Archive> lib = new ArrayList<>();
|
List<Archive> lib = new ArrayList<>();
|
||||||
File file = new File(root);
|
File file = new File(root);
|
||||||
if (!"/".equals(root)) {
|
if (!"/".equals(root)) {
|
||||||
|
@ -483,6 +486,9 @@ public class PropertiesLauncher extends Launcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Archive getArchive(File file) throws IOException {
|
private Archive getArchive(File file) throws IOException {
|
||||||
|
if (isNestedArchivePath(file)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
String name = file.getName().toLowerCase();
|
String name = file.getName().toLowerCase();
|
||||||
if (name.endsWith(".jar") || name.endsWith(".zip")) {
|
if (name.endsWith(".jar") || name.endsWith(".zip")) {
|
||||||
return new JarFileArchive(file);
|
return new JarFileArchive(file);
|
||||||
|
@ -490,6 +496,10 @@ public class PropertiesLauncher extends Launcher {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isNestedArchivePath(File file) {
|
||||||
|
return file.getPath().contains(NESTED_ARCHIVE_SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
private List<Archive> getNestedArchives(String path) throws Exception {
|
private List<Archive> getNestedArchives(String path) throws Exception {
|
||||||
Archive parent = this.parent;
|
Archive parent = this.parent;
|
||||||
String root = path;
|
String root = path;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2017 the original author or authors.
|
* Copyright 2012-2018 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -213,6 +213,15 @@ public class PropertiesLauncherTests {
|
||||||
assertThat(archives).areExactly(1, endingWith("app.jar!/"));
|
assertThat(archives).areExactly(1, endingWith("app.jar!/"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUserSpecifiedNestedJarPath() throws Exception {
|
||||||
|
System.setProperty("loader.path", "nested-jars/app.jar!/foo.jar");
|
||||||
|
System.setProperty("loader.main", "demo.Application");
|
||||||
|
PropertiesLauncher launcher = new PropertiesLauncher();
|
||||||
|
List<Archive> archives = launcher.getClassPathArchives();
|
||||||
|
assertThat(archives).hasSize(1).areExactly(1, endingWith("foo.jar!/"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUserSpecifiedDirectoryContainingJarFileWithNestedArchives()
|
public void testUserSpecifiedDirectoryContainingJarFileWithNestedArchives()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
|
|
Loading…
Reference in New Issue