2010-01-07 4 views
28

나는 앱에 두 개의 메인 클래스를 가지고있다. Eclipse export 함수를 사용하여 runnable jar 파일에 패키지하면 기본 기본 클래스를 선택해야한다.런타임시 runnable jar의 메인 클래스 선택

런타임시 jar에서 기본이 아닌 기본 클래스에 액세스하는 방법이 있습니까?

답변

43

java -cp myapp.jar com.example.Main1java -cp myapp.jar com.example.Main2을 통해 모두 액세스 할 수 있습니다. jar의 기본 기본 클래스는 java -jar myapp.jar을 통해 앱을 호출 할 때 사용됩니다.

자세한 내용은 JAR_(file_format)을 참조하십시오. 이클립스에서 main 클래스를 선택하면 jar 파일 내부에 Main-Class: myPrograms.MyClassMETA-INF/MANIFEST.MF의 jar 매니페스트 내부에 설정됩니다.

+0

: 추상적으로

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

이 더, 당신이 그 (것)이 void execute() 일부 Action 인터페이스를 구현하고 Map에서 그들을 잡아 수 있도록 고려할 수 있습니다 (/ 다른 블록이있는 경우 제거합니다) 이것은 사용자 정의 클래스 로더에로드를 위임 할 때 Eclipse Runnable 익스포트와 함께 작동하지 않습니다. –

+4

클래스 경로 특성이있는 경우이 작업을 수행 할 수 없습니다. –

8

예, 가능합니다. 각각의 밑에는 인자를 기반으로 원하는 클래스/메소드를 실행하는 main 메소드를 가진 다른 클래스를 추가 할 수 있습니다.

예.

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

당신이로 사용할 수

은 다음 (자신과 같은 args.length 등 명백한 검사 추가하는 것을 잊지 마세요) : 잘 설계된 경우

java -jar YourJar.jar foo 

이 그러나 수를 다른 클래스의 main() 메소드를 불필요하게 만드십시오. 예 :

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(); 
} 
관련 문제