fixed package path return null in executable jar

This commit is contained in:
jinyu 2017-08-28 20:38:07 +08:00
parent fa2bef41fd
commit c195989e33

View File

@ -41,6 +41,10 @@ public final class ClassUtil {
public static List<Class<?>> getClasses(String packageName) { public static List<Class<?>> getClasses(String packageName) {
String packageFileName = packageName.replace(POINT, File.separator); String packageFileName = packageName.replace(POINT, File.separator);
URL fullPath = getDefaultClassLoader().getResource(packageFileName); URL fullPath = getDefaultClassLoader().getResource(packageFileName);
if (fullPath == null) {
fullPath = ClassUtil.class.getClassLoader().getResource(
packageFileName);
}
String protocol = fullPath.getProtocol(); String protocol = fullPath.getProtocol();
if (protocol.equals(ServerToolkits.PROTOCOL_FILE)) { if (protocol.equals(ServerToolkits.PROTOCOL_FILE)) {
try { try {
@ -51,7 +55,10 @@ public final class ClassUtil {
} }
} else if (protocol.equals(ServerToolkits.PROTOCOL_JAR)) { } else if (protocol.equals(ServerToolkits.PROTOCOL_JAR)) {
try { try {
return findClassesByJar(((JarURLConnection) fullPath.openConnection()).getJarFile(), packageName); return findClassesByJar(
((JarURLConnection) fullPath.openConnection())
.getJarFile(),
packageName);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -79,10 +86,12 @@ public final class ClassUtil {
if (files != null) { if (files != null) {
for (File file : files) { for (File file : files) {
if (file.isDirectory()) { if (file.isDirectory()) {
classes.addAll(findClassesByFile(file, packageName + POINT + file.getName())); classes.addAll(findClassesByFile(file, packageName + POINT
+ file.getName()));
} else { } else {
try { try {
classes.add(Class.forName(packageName + POINT + file.getName().replace(CLASS, ""))); classes.add(Class.forName(packageName + POINT
+ file.getName().replace(CLASS, "")));
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
; ;
} }
@ -101,7 +110,8 @@ public final class ClassUtil {
* 包的全限类名 * 包的全限类名
* @return * @return
*/ */
private static List<Class<?>> findClassesByJar(JarFile jar, String packageName) { private static List<Class<?>> findClassesByJar(JarFile jar,
String packageName) {
List<Class<?>> classes = new ArrayList<Class<?>>(); List<Class<?>> classes = new ArrayList<Class<?>>();
Enumeration<JarEntry> jarEntries = jar.entries(); Enumeration<JarEntry> jarEntries = jar.entries();
while (jarEntries.hasMoreElements()) { while (jarEntries.hasMoreElements()) {
@ -109,8 +119,10 @@ public final class ClassUtil {
if (jarEntry.isDirectory()) { if (jarEntry.isDirectory()) {
continue; continue;
} }
String className = jarEntry.getName().replace(File.separator, POINT); String className = jarEntry.getName()
if (!className.startsWith(packageName) || !className.endsWith(CLASS)) { .replace(File.separator, POINT);
if (!className.startsWith(packageName)
|| !className.endsWith(CLASS)) {
continue; continue;
} }
try { try {