Eclipse Plug-in 의 내부 resource 들은 Plug-in 과 함께 jar 로 묶여 Eclipse 에 포함되게 된다.
예를들어 jar 내에 "resources/index.html" 이라는 파일이 있다면 이를 접근하기 위해 다음과 같은 함수가 사용된다.
URL url = Activator.class.getClassLoader().getResource("resources/index.html"); InputStream stream = Activator.class.getClassLoader().getResourceAsStream("resources/index.html");
이때 URL 의 경우, 해당 resource 가 포함된 plug-in 의 feature 설정이 unpack 설정이 되어 있지 않으면 Eclipse 에 jar 로 묶이기 때문에 Local File URL 을 얻을 수 가 없다.
쉽게 말하면, jar 로 묶여있는 상태의 plug-in 혹은 라이브러리에 포함된 resource 파일들에 대한 Runtime 시의 절대경로를 얻을 수 없다는 뜻이다.
절대경로를 얻을수 없는 resource 들은 Browser.setURL() 같은 함수에서 쓰일수 없는 유효하지 않은 URL 값을 가지게 된다.
위와 같은 문제를 Eclipse 에서는 jar 의 일부 리소스들을 다음폴더에 압축해제시켜놓고 사용한다.
- workspace/configuration/org.eclipse.osgi/bundles/..
위의 디렉토리는 Runtime 에 jar 안의 resource 들에 대한 절대경로로 해당 resource 에 대한 절대경로를 얻으려면 다음 API 를 사용하면 된다.
Platform.asLocalURL(URL) - Deprecated FileLocator.toFileURL(URL) //example Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID); URL url= bundle.getEntry("resources/index.html"); // bundleresource://547.fwk25421790:1/resources/index.html URL localurl = FileLocator.toFileURL(url); // file:/home/leechwin/eclipse/workspace/.metadata/.plugins/org.eclipse.pde.core/Indigo.product/org.eclipse.osgi/bundles/547/1/.cp/resources/index.html
참고로 Eclipse 는 Resource 에 Access 가 되는 파일들만 미리 bundles 밑에 폴더에 압축을 풀어놓고 Access 가 되지 않는 파일들은 압축을 풀어놓지 않아, html 과 같은 파일만 Access 하게 되면, 해당 html 에 연관된 css, javascript 등은 압축이 해제되어있지않아 원하는 결과를 얻지 못할 수 있다.
이럴경우 해당 파일의 Parent 경로(파일의 디렉토리)를 인자로 주면 해당 폴더의 내용들이 모두 압축이 풀리게 된다.
'Eclipse' 카테고리의 다른 글
[Eclipse] SWT Browser 로 Java 와 Javascript Function Callback 연결하기 (0) | 2013.11.11 |
---|---|
[Eclipse] SWT Browser 에서 Javascript 실행결과를 evaluate 함수로 얻기 (0) | 2013.11.11 |
[Eclipse] extension 의 IConfigurationElement 으로 부터 해당 Bundle 얻어오기 (0) | 2013.10.02 |
[Eclipse] jface Dialog 를 상속받은 경우 Titile 등을 설정하기 (0) | 2013.09.12 |
[Eclipse] ISelection 종류판단하기 (0) | 2013.05.12 |