2010-06-21 6 views
1

특정 폴더 "번들"에서 조회하는 업데이터 번들을 가지고 있으며 현재 번들에 설치 및 업데이트 할 새 번들을 확인합니다. 상위 디렉토리에서 OSGi 프레임 워크는 "/ 프레임 워크"디렉토리에 있으며 업데이터 번들은 "/ system"디렉토리에 있고 디렉토리는 동일한 상위 디렉토리의 "/ bundles"디렉토리입니다. 업데이터 번들 내에서 상대 경로가있는 File 객체가 만들어 지지만 "./bundles"문자열과 함께 작동하지 않습니다. 그리고 어떤 jar 파일이 상대 경로로 간주되는지 알지 못합니다. 내가 ..이 문제에 대해 덕분에 어떤 통찰력 또는 정보 감사하겠습니다, 니즈OSGi 번들의 상대 경로

편집 : 이미 알아 냈어. Equinox를 시작하는 데 사용하는 Ruby 스크립트에 따라 경로가 해결 된 것처럼 보입니다. 따라서 Resolution Path는 Ruby 시스템을 사용하여 "-console"플래그를 전달하여 Equinox를 시작하는 디렉토리입니다. 답변 해 주셔서 감사합니다.

답변

0

이미 알아 냈습니다. Equinox를 시작하는 데 사용하는 Ruby 스크립트에 따라 경로가 해결 된 것처럼 보입니다. 따라서 Resolution Path는 Ruby 시스템을 사용하여 "-console"플래그를 전달하여 Equinox를 시작하는 디렉토리입니다. 답변 감사 니즈

2

OSGi 구성 및 구현 방식에 따라 다릅니다. 여러 위치에 상대적 일 수 있으며 가장 가능성있는 위치는 프레임 워크 위치입니다. 상대 경로로 파일을 작성하여 테스트하지 않고

new File("./bundles").getAbsolutePath(); 

값을 확인하는 것이 좋습니다.

3

새로운 파일 ("./ bundles") resolves을 현재 작업 디렉토리와 비교합니다.

입력 스트림을 직접 가져 와서 BundleContext # installBundle (String, InputStream)을 호출하여 번들을 설치할 수 있습니다.

OSGi 자체는 파일 시스템 레이아웃에 대한 가정을하지 않으며 해당 번들도 디스크에 있습니다. 그러나 프레임 워크로 Equinox를 사용하는 경우 "osgi.install.area"에 대한 상대 경로를 확인할 수 있습니다. Location service은 이것을 줄 수 있습니다. 그런 다음 절대 경로를 사용하여 번들을 설치하십시오.

또는 System Bundle (BundleContext.getBundle (0))을 가져 와서 FileLocator (org.eclipse.equinox.common에서)를 사용하여 디스크에서 찾을 수 있습니다.

+0

이 덕분에 미래의 요구에 대한 유용한 정보를 이잖아 .. –

+0

을 다음은 춘분입니다 : http://wiki.eclipse.org/index.php/FAQ_How_do_I_find_out_the_install_location_of_a_plug-in%3F – fikovnik