ODL에서 외부 라이브러리 사용하기

ODL SB plugin을 만들면서 외부 라이브러리를 거의 필수적으로 사용하게 되는데 karaf상에서 외부라이브러리를 사용하는 방식이 다소 복잡하여 정리를 하였다.

내가 필요한 라이브라리는 아래와 같다.

1
2
3
4
5
6
7
8
9
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.ClientHttpRequest;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

위 라이브러리들은

  • org.springframework
  • com.fasterxml.jackson.core

에 포함된 라이브러리 인데 기존 자바 프로젝트처럼 단순히 dependeny만 잡아준다고해서 karaf에서 bundle로 해당 SB plugin을 기동하려고 하면 라이브러리를 추가하라는 에러가 나온다.

그래서 OSGi Framework 에서 외부라이브러리를 embedded 해주는 apache felix를 pom.xml에 설정을 해주어야 정상적으로 사용이 가능하다.

위에 명시된 두개의 외부 라이브러리를 사용하기 위해 pom.xml에 dependency를 잡아주고 추가적으로 build 설정에 felix를 추가해주었다. 설정내용은 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Export-Package>
org.springframework.*,
com.fasterxml.jackson.*
</Export-Package>
<Import-Package>
*;resolution:=optional
</Import-Package>
<Embed-Dependency>
jackson-databind;type=!pom;inline=false,
spring-web;type=!pom;inline=false
</Embed-Dependency>
<Embed-Transitive>
true
</Embed-Transitive>
<Include-Resource>
{maven-resources}
</Include-Resource>
<_removeheaders>
Embed-Dependency,Include-Resource
</_removeheaders>
</instructions>
</configuration>
</plugin>
</plugins>
</build>

각 테그들에 대한 내용은 아래 문서를 보고 확인을 해봐야 할것 같다.

Apache Felix Maven Bundle Plugin (BND) Documentation

공유하기