Moved jar inspection into a separate method, to avoid loading the JarFile type unless necessary.

This commit is contained in:
jfrijters 2008-12-23 05:45:03 +00:00
Родитель 2ce813b790
Коммит 97e3708ecc
1 изменённых файлов: 27 добавлений и 18 удалений

Просмотреть файл

@ -302,27 +302,11 @@ public class Starter
string[] vmargs = Startup.glob(vmargsIndex);
if (jar)
{
JarFile jf = new JarFile(mainClass);
try
mainClass = GetMainClassFromJarManifest(mainClass);
if (mainClass == null)
{
Manifest manifest = jf.getManifest();
if(manifest == null)
{
Console.Error.WriteLine("Jar file doesn't contain manifest");
return 1;
}
mainClass = manifest.getMainAttributes().getValue(Attributes.Name.MAIN_CLASS);
}
finally
{
jf.close();
}
if(mainClass == null)
{
Console.Error.WriteLine("Manifest doesn't contain a Main-Class.");
return 1;
}
mainClass = mainClass.Replace('/', '.');
}
java.lang.Class clazz = java.lang.Class.forName(mainClass, true, java.lang.ClassLoader.getSystemClassLoader());
try
@ -379,6 +363,31 @@ public class Starter
return 1;
}
private static string GetMainClassFromJarManifest(string mainClass)
{
JarFile jf = new JarFile(mainClass);
try
{
Manifest manifest = jf.getManifest();
if (manifest == null)
{
Console.Error.WriteLine("Jar file doesn't contain manifest");
return null;
}
mainClass = manifest.getMainAttributes().getValue(Attributes.Name.MAIN_CLASS);
}
finally
{
jf.close();
}
if (mainClass == null)
{
Console.Error.WriteLine("Manifest doesn't contain a Main-Class.");
return null;
}
return mainClass.Replace('/', '.');
}
private static Method FindMainMethod(java.lang.Class clazz)
{
// HACK without this hack, clazz.getDeclaredMethods would throw a NoClassDefFoundError if any