2010-01-07 13 views

cevap

43

Her ikisi de java -cp myapp.jar com.example.Main1 ve java -cp myapp.jar com.example.Main2 aracılığıyla erişebilirsiniz. Kavanozdaki varsayılan ana sınıf, uygulamanızı java -jar myapp.jar aracılığıyla çağırdığınızda geçerlidir.

Daha fazla ayrıntı için JAR_(file_format) adresine bakın. Eclipse'de ana sınıfı seçtiğinizde, jar dosyasının yan tarafındaki META-INF/MANIFEST.MF kavanozun içinde bulunan Main-Class: myPrograms.MyClass aşağıdaki gibi ayarlanır.

+0

: soyut To

public static void main(String... args) { if ("foo".equals(args[0])) { new Foo().execute(); } else if ("bar".equals(args[0])) { new Bar().execute(); } } 

bu daha, bunları bir void execute() bazı Action arabirimini uygulayan ve bir Map bunların ele alalım için düşünebiliriz (/ else blokları ise kurtulmak için) Bu, özel bir sınıf yükleyicisine yükleme yapmakla yükümlü oldukları için Eclipse Runnable dışa aktarma işlemiyle çalışmaz. –

+4

Sınıf Yolu özniteliğiniz varsa bu işe yaramaz –

8

Evet, mümkün. Her birinin altında, argümana dayalı olarak istenen sınıfı/yöntemi çalıştıran bir ana yöntemle başka bir sınıf ekleyebilirsiniz.

E.g.

public static void main(String... args) { 
    if ("foo".equals(args[0])) { 
     Foo.main(args); 
    } else if ("bar".equals(args[0])) { 
     Bar.main(args); 
    } 
} 

sen olarak kullanabileceğiniz

aşağıdaki (kendin gibi args.length ve benzeri bariz kontrolleri eklemeyi unutmayın): iyi tasarlanmış olursa

java -jar YourJar.jar foo 

, bu ancak can Diğer sınıfların main() yöntemini gereksiz hale getirin. Örneğin.

private static Map<String, Action> actions = new HashMap<String, Action>(); 
static { 
    actions.put("foo", new Foo()); 
    actions.put("bar", new Bar()); 
} 

public static void main(String... args) { 
    actions.get(args[0]).execute(); 
} 
İlgili konular