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