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