зеркало из https://github.com/mono/ikvm-fork.git
Moved jar inspection into a separate method, to avoid loading the JarFile type unless necessary.
This commit is contained in:
Родитель
2ce813b790
Коммит
97e3708ecc
|
@ -302,27 +302,11 @@ public class Starter
|
||||||
string[] vmargs = Startup.glob(vmargsIndex);
|
string[] vmargs = Startup.glob(vmargsIndex);
|
||||||
if (jar)
|
if (jar)
|
||||||
{
|
{
|
||||||
JarFile jf = new JarFile(mainClass);
|
mainClass = GetMainClassFromJarManifest(mainClass);
|
||||||
try
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
mainClass = mainClass.Replace('/', '.');
|
|
||||||
}
|
}
|
||||||
java.lang.Class clazz = java.lang.Class.forName(mainClass, true, java.lang.ClassLoader.getSystemClassLoader());
|
java.lang.Class clazz = java.lang.Class.forName(mainClass, true, java.lang.ClassLoader.getSystemClassLoader());
|
||||||
try
|
try
|
||||||
|
@ -379,6 +363,31 @@ public class Starter
|
||||||
return 1;
|
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)
|
private static Method FindMainMethod(java.lang.Class clazz)
|
||||||
{
|
{
|
||||||
// HACK without this hack, clazz.getDeclaredMethods would throw a NoClassDefFoundError if any
|
// HACK without this hack, clazz.getDeclaredMethods would throw a NoClassDefFoundError if any
|
||||||
|
|
Загрузка…
Ссылка в новой задаче