2015-02-07 1 views
0

현재 사용자는 소프트웨어를 직접 수정하는 대신 플러그인을 프로그래밍하고 프로그래밍 지식이없는 다른 사용자가 쉽게 변경할 수 있도록 내 소프트웨어를 확장 할 수있는 서버 소프트웨어 용 API를 개발 중입니다. 이러한 플러그인을 추가하여 소프트웨어. 지금까지 모든 것이 잘 작동합니다. 그러나 구성에 문제가 있습니다. 주 : 당신이 볼jar 클래스를 얻는 방법

각 플러그인은 plugin.yml이 4 개 개의 속성으로 저장 파일이 메인 클래스가 여기 이름 저장 :이 플러그인 이름이 버전을 저장 위치 :이 어디 플러그인 버전입니다 저장 됨 작성자 : 이것은 플러그인 작성자가 저장되는 곳입니다.

이제 플러그인이 콘솔에 무엇인가를 인쇄하려면 this.getServer(). getLogger(). info (" MESSAGE); (플러그인이 다른 클래스를 확장하여 다른 클래스 대신 "this"를 사용하여 로그하는 이유)

하지만 그들이 함수를 호출 할 때 어떤 플러그인을 얻는 지에 대한 아이디어는 없다. 이벤트 처리기가 이벤트 함수를 실행하기 위해 주기적으로 사용하는 PluginSessions의 ArrayList가 있습니다.

내 솔루션은 거기에서 plugin.yml을 얻을 수 있도록 클래스가 호출되는 jar 파일을 가져 오는 것입니다. 그러나, 나는 그것을 얻는 방법에 대한 생각이 없으며 Class.forName(); 및 일부 다른 코드. 그러나 클래스가 코드를 실행하는 jar/프로젝트 내에 존재하지 않기 때문에 ClassNotFoundException을 발생시킵니다.

Class.forName()을 사용하지 않고 클래스가 들어오는 항아리를 얻는 방법을 알고있는 사람이 있습니까? 감사! 대한 -Trent

답변

1

Class.getResource을 살펴보십시오.

MyClass.getResource ("plugin.yml") (또는 "/plugin.yml"을 슬래시로 또는 "/plugin.yml") 호출하면 동일한 항아리에있는 plugin.yml 파일을 가리키는 파일 URL이 반환됩니다. 내 수업. (경로가 잘못되었거나 jar에 "plugin.yml"파일이 없으면 null이됩니다.) 그러면 해당 자원에 대한 InputStream을 열 수 있습니다. 플러그인 프레임 워크에서 myPluginInstance.getClass().getResource을 사용할 수 있습니다.

+1

감사합니다. 이제 마침내 플러그인 세션 클래스 외부에서 플러그인 정보를 얻을 수 있습니다! :디 – Whirvis

0

가정 항아리 'PluginSessions' 이미 당신은 다음과 같은 트릭을 시도 할 수 있습니다 클래스 경로 일식하여 추가됩니다 - 그것은을 더블 클릭하여

  1. 선택/강조 PluginSessions
  2. 이제
  3. 라는 대화 개방형CTRL + 시프트 + T를 누르십시오 등장합니다. 여기에서 PluginSessions 클래스가 어디에서 왔는지 확인할 수 있습니다. 하나 이상의 항아리에 PluginSessions 클래스가 있으면 그 중 하나가 목록에 있습니다. 프로젝트하여 항아리의 필요성을 모두 추가해야이 CTRL + 시프트 + T 트릭 혜택에

classpath에 추가 할 수 있습니다.

+0

이것은 내가 원하는 대답이 아닙니다. 나는 클래스가 호출하는 항아리를 얻을 수 있기를 원한다고 말했다. (플러그인) 코드를 통해 플러그인을 얻을 수있다.항아리에서 yml을 가져 와서 그 이름을 얻으십시오. – Whirvis