Improve handling of absolute URLs in Class-Path manifest attribute
Closes gh-10268
This commit is contained in:
parent
616d11c00a
commit
c27d678b81
|
@ -104,7 +104,7 @@ final class ChangeableUrls implements Iterable<URL> {
|
||||||
return Collections.<URL>emptyList();
|
return Collections.<URL>emptyList();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return getUrlsFromManifestClassPathAttribute(jarFile);
|
return getUrlsFromManifestClassPathAttribute(url, jarFile);
|
||||||
}
|
}
|
||||||
catch (IOException ex) {
|
catch (IOException ex) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
|
@ -126,8 +126,8 @@ final class ChangeableUrls implements Iterable<URL> {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<URL> getUrlsFromManifestClassPathAttribute(JarFile jarFile)
|
private static List<URL> getUrlsFromManifestClassPathAttribute(URL jarUrl,
|
||||||
throws IOException {
|
JarFile jarFile) throws IOException {
|
||||||
Manifest manifest = jarFile.getManifest();
|
Manifest manifest = jarFile.getManifest();
|
||||||
if (manifest == null) {
|
if (manifest == null) {
|
||||||
return Collections.<URL>emptyList();
|
return Collections.<URL>emptyList();
|
||||||
|
@ -138,17 +138,13 @@ final class ChangeableUrls implements Iterable<URL> {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
String[] entries = StringUtils.delimitedListToStringArray(classPath, " ");
|
String[] entries = StringUtils.delimitedListToStringArray(classPath, " ");
|
||||||
List<URL> urls = new ArrayList<URL>(entries.length);
|
List<URL> urls = new ArrayList<>(entries.length);
|
||||||
File parent = new File(jarFile.getName()).getParentFile();
|
List<URL> nonExistentEntries = new ArrayList<>();
|
||||||
List<File> nonExistentEntries = new ArrayList<File>();
|
|
||||||
for (String entry : entries) {
|
for (String entry : entries) {
|
||||||
try {
|
try {
|
||||||
File referenced = new File(entry);
|
URL referenced = new URL(jarUrl, entry);
|
||||||
if (!referenced.isAbsolute()) {
|
if (new File(referenced.getFile()).exists()) {
|
||||||
referenced = new File(parent, entry);
|
urls.add(referenced);
|
||||||
}
|
|
||||||
if (referenced.exists()) {
|
|
||||||
urls.add(referenced.toURI().toURL());
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
nonExistentEntries.add(referenced);
|
nonExistentEntries.add(referenced);
|
||||||
|
|
|
@ -75,11 +75,12 @@ public class ChangeableUrlsTests {
|
||||||
@Test
|
@Test
|
||||||
public void urlsFromJarClassPathAreConsidered() throws Exception {
|
public void urlsFromJarClassPathAreConsidered() throws Exception {
|
||||||
File relative = this.temporaryFolder.newFolder();
|
File relative = this.temporaryFolder.newFolder();
|
||||||
File absolute = this.temporaryFolder.newFolder();
|
File absoluteFile = this.temporaryFolder.newFolder();
|
||||||
|
URL absoluteUrl = this.temporaryFolder.newFolder().toURI().toURL();
|
||||||
File jarWithClassPath = makeJarFileWithUrlsInManifestClassPath(
|
File jarWithClassPath = makeJarFileWithUrlsInManifestClassPath(
|
||||||
"project-core/target/classes/", "project-web/target/classes/",
|
"project-core/target/classes/", "project-web/target/classes/",
|
||||||
"does-not-exist/target/classes", relative.getName() + "/",
|
"does-not-exist/target/classes", relative.getName() + "/",
|
||||||
absolute.getAbsolutePath() + "/");
|
absoluteFile.getAbsolutePath() + "/", absoluteUrl);
|
||||||
new File(jarWithClassPath.getParentFile(), "project-core/target/classes")
|
new File(jarWithClassPath.getParentFile(), "project-core/target/classes")
|
||||||
.mkdirs();
|
.mkdirs();
|
||||||
new File(jarWithClassPath.getParentFile(), "project-web/target/classes").mkdirs();
|
new File(jarWithClassPath.getParentFile(), "project-web/target/classes").mkdirs();
|
||||||
|
@ -89,7 +90,7 @@ public class ChangeableUrlsTests {
|
||||||
assertThat(urls.toList()).containsExactly(
|
assertThat(urls.toList()).containsExactly(
|
||||||
new URL(jarWithClassPath.toURI().toURL(), "project-core/target/classes/"),
|
new URL(jarWithClassPath.toURI().toURL(), "project-core/target/classes/"),
|
||||||
new URL(jarWithClassPath.toURI().toURL(), "project-web/target/classes/"),
|
new URL(jarWithClassPath.toURI().toURL(), "project-web/target/classes/"),
|
||||||
relative.toURI().toURL(), absolute.toURI().toURL());
|
relative.toURI().toURL(), absoluteFile.toURI().toURL(), absoluteUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
private URL makeUrl(String name) throws IOException {
|
private URL makeUrl(String name) throws IOException {
|
||||||
|
|
Loading…
Reference in New Issue