diff --git a/ikvm/starter.cs b/ikvm/starter.cs index 46a5abcc..10ae735b 100644 --- a/ikvm/starter.cs +++ b/ikvm/starter.cs @@ -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