2012-09-28 8 views
3

나는 apache felix 용 번들을 개발하기 시작했으며 ops4j pax 플러그인을 사용했다.번들에 처음부터 org.apache.felix.scr 주석을 사용하는 방법은 무엇입니까?

pax-create-project으로 프로젝트 구조를 만들었으며 정상적으로 pax-create-bundle을 만들었습니다. 그런 다음, Maven으로 모든 것을 빌드하기위한 초기 프로젝트 구조를 얻습니다. 여기서 중요한 부분은 묶음에 자신의 pom (bundlename/pom.xml)과 bnd 파일 (bundlename/osgi.bnd)이 있지만 maven-bundle-plugin의 구성은 이미 poms/compiled/pom.xml에 있습니다. 번들 메타 데이터가 poms/compiled/pom.xml으로 구성되었지만 표준 활성화자가 위에서 언급 한 osgi.bnd 파일로 구성되었습니다. bnd 파일의 기본값은 Bundle-Activator: ${bundle.namespace}.internal.ExampleActivator입니다.

지금 나는 내가 번들에 종속에서 자신의 치어이 포함 org.apache.felix.scr에서 주석을 사용하기 시작하고 싶었 :

<dependency> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>org.apache.felix.scr</artifactId> 
    <version>1.6.0</version> 
</dependency> 

을 그리고 서비스에 대한 내 인터페이스를 만들어 :뿐만 아니라

package namespace; 

public interface Sample { 
    void sayHello(); 
} 

을 주석이있는 구현은 org.apache.felix.scr :

package namespace.internal; 

import org.apache.felix.scr.annotations.Activate; 
import org.apache.felix.scr.annotations.Component; 
import org.apache.felix.scr.annotations.Deactivate; 
import namespace.Sample; 

@Component 
@Service 
public class SampleImpl implements Sample{ 

    @Activate 
    void start(){ 
    System.out.println("Started SampleImpl."); 
    } 

    @Deactivate 
    void stop(){ 
    System.out.println("Stopped SampleImpl."); 
    } 

    @Override 
    public void sayHello() { 
    System.out.println("Hello!"); 
    } 
} 

구성 요소를 시작하려면 무엇을 osgi.bnd 파일에 넣어야합니까? 나는 BundleActivator를 더 이상 사용하지 않기 때문에 위에서 언급 한 기본 항목을 제거해야했습니다. 이제 여기

는 질문 : 나는이 mvn clean install pax:provision 내 번들을 시작하는 펠릭스 환경을 시작하자 나를 출력물의 어떤를 볼 수 있도록하기 위해 위에서 언급 한 모든 파일을 어떻게해야합니까? 나는 이미 내가 너무 시작하고 아파치 로그 서비스의 로그 출력에보고하고 그냥 저에게 말한다 :

2012.09.28 16:52:44 INFO - Bundle: namespace - BundleEvent STARTED 
2012.09.28 16:52:44 INFO - Bundle: namespace - BundleEvent RESOLVED 

이 어떤 힌트가 아주 잘 부탁드립니다. 또는 링크를 통해 필자는 scr과 번들을위한 maven 플러그인을 사용하기위한 완벽한 안내서를 찾기 위해 더 많은 시간 동안 검색했습니다.

인사말, Kjellski

답변

5

이이 주제에 대한 내 coderwall의 작성자의 수정입니다 : http://coderwall.com/p/q39uxq

먼저 구성 리딩/컴파일/pom.xml 파일에서 서브 모듈의 일반 편집 구성. 받는다는 - 번들 플러그인이 이미 어디 플러그인의 권리를 추가

<plugin> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>maven-scr-plugin</artifactId> 
    <version><timeofwriting:1.8.0></version> 
    <executions> 
     <execution> 
      <id>generate-scr-scrdescriptor</id> 
      <goals> 
       <goal>scr</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

를 같은 파일에서 리딩/컴파일/치어 아래.XML, 받는다는 - 번들 플러그인에 대한 설명을보고 바로 < _include> 문에서 추가

<dependency> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>org.apache.felix.scr</artifactId> 
    <version><timeofwriting:1.6.0></version> 
</dependency> 
<dependency> 
    <groupId>org.apache.felix</groupId> 
    <artifactId> 
     org.apache.felix.scr.annotations 
    </artifactId> 
    <version><timeofwriting:1.7.0></version> 
</dependency> 

:

<Service-Component> 
    OSGI-INF/serviceComponents.xml 
</Service-Component> 

지금을 사용하기 위해 하위 프로젝트의 주석에 따라 달라집니다 구성 요소를으로 지정하고 @ 컴포넌트@ 서비스을 지정하십시오. api 번들처럼 none을 포함 시키려면 osgi.bnd 파일에 "Service-Component : *"를 삽입하면됩니다. 이로 인해 번들 플러그인이 포함되지 않은 프로젝트의 누락 된 OSGI.INF에 대해 불평하지 않게됩니다. 이 사람하는 데 도움이

희망)

건배, Kjellski

관련 문제