2014-06-16 2 views
0

Eclipse 프로젝트 (MainProject)가 있으며 다른 Eclipse 프로젝트 (ReferencedProject)를 참조합니다. 또한 MainProject는 JAR 파일 (ReferencedJar)을 참조합니다. 이 ReferencedJar의 파일 이름은 알려져 있습니다. 또한 ReferencedJar에 클래스 (ReferencedClass)가 있다는 것을 알고 있지만, 패키지 경로가 미리 알려지지 않았기 때문에 ReferencedClass 패키지가 무엇인지 모릅니다.클래스를 패키지를 모른 채 인스턴스화하는 방법은 무엇입니까?

리플렉션을 사용하여 ReferencedProject에서 ReferencedClass를 인스턴스화해야합니다. 어떻게해야합니까? 그리고 프로젝트가 Eclipse 외부의 독립 실행 형 jar에 패키지로 포함되어있을 때 솔루션은 괜찮습니까?

이 질문의 이유는 다음과 같습니다. ReferencedJar는 모델러 응용 프로그램에 의해 생성 된 파일입니다. 그것은 귀하의 모델에 대한 자바 클래스를 생성하고 ReferencedJar에 넣습니다. 사용자는 생성하는 클래스가 들어갈 패키지를 선택할 수 있습니다. 그러나 클래스 이름은 항상 동일합니다. MainProject는이 생성 된 jar를 포함하는 프로젝트이지만 ReferencedProject (프레임 워크)도이 생성 된 jar에서 클래스를 인스턴스화해야합니다. 희망이 질문을 더 명확하게. 사전

편집에

감사합니다 : 사실은 내가 아이디어를 가지고 있지만 그것을 구현하는 방법을 모르겠어요. ReferencedJar 파일의 이름을 알고 있기 때문에 런타임에 액세스하고 포함 된 모든 클래스를 확인할 수있었습니다. 그런 다음 이름 비교를 통해 일치하는 클래스를 찾을 수 있습니다. 하지만 런타임에 ReferencedJar에 어떻게 액세스 할 수 있습니까?

+0

프로세스를 제어하는 ​​경우 및 정규화 된 ReferencedClass 이름이 나열된 알려진 위치의 구성 파일 – MadProgrammer

+0

슬프게도, 나는 아닙니다. Modeller 응용 프로그램의 코드를 수정할 수 없습니다. – randomVariable

답변

0

당신은 패키지 당신이 만약 모르는 클래스를 인스턴스화 할 수 없습니다

1

만큼 당신이 필요로하는 클래스가 클래스 경로에, 당신은 Class.forName(String className)

String className = "WhatEver"; 
String packageName = "some.package"; 
Class<?> c = Class.forName(packageName + "." + className); 
를 호출에 대한 참조를 얻을 수 있습니다

그러나 패키지 이름을 모르는 경우 구성 파일에서 패키지 이름을 가져올 방법이 없으면 reflections과 같은 라이브러리를 사용하여 클래스 경로를 검색하고 관련 클래스를 찾을 것을 권장합니다.

+0

Reflections 라이브러리 웹 사이트는 정규식과 일치하는 모든 리소스를 얻는다 고 말합니다. 나는 이것이 내 문제를 해결해야한다고 생각하지만 솔직히이 작업을 위해 전체 라이브러리를 사용하는 것을 선호하지는 않는다. 그러나 더 간단한 해결책을 찾지 못하면 다시 시도해 보겠습니다. – randomVariable

관련 문제