2012-05-02 60 views
1

我一直在嘗試在一個osgi包的項目中使用querydsl。 我的pom.xml具有以下依存關係:在osgi中使用QueryDSL

<dependency> 
     <groupId>com.mysema.querydsl</groupId> 
     <artifactId>querydsl-apt</artifactId> 
     <version>2.5.0</version> 

    </dependency> 

    <dependency> 
     <groupId>com.mysema.querydsl</groupId> 
     <artifactId>querydsl-jpa</artifactId> 
     <version>2.5.0</version> 
    </dependency> 

除了插件

 <plugin> 
      <groupId>com.mysema.maven</groupId> 
      <artifactId>maven-apt-plugin</artifactId> 
      <version>0.3.2</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>process</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>target/generated-sources/java</outputDirectory> 
         <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    <plugin> 
      <groupId>org.ops4j</groupId> 
      <artifactId>maven-pax-plugin</artifactId> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <extensions>true</extensions> 
      <!-- | the following instructions build a simple set of public/private 
       classes into an OSGi bundle --> 
      <configuration> 
       <instructions> 
        <Import-Package>com.mysema.query.jpa,*</Import-Package> 
        <Export-Package>com.mypackage.package.*;version="${project.version}"</Export-Package> 
       </instructions> 
      </configuration> 
     </plugin> 

不過,當我嘗試啓動捆綁我得到:

Error executing command: Unresolved constraint in bundle com.mypackage.package [163]: Unable to resolve 163.0: missing requirement [163.0] package; (&(package=com.mysema.query.jpa)(version>=2.5.0)(!(version>=3.0.0))) 

我正在使用querydsl的舊版本,但顯然他們最近修復了一些stuff about osgi,所以我升級了。問題依然存在。

我缺少querydsl在osgi內部工作嗎?

+0

querydsl-jpa bundle有很多依賴(直接和瞬態),我假設你已經加載了所有這些,並且querydsl-jpa bundle已啓動? – earcam

+0

沒有。你是對的。我是osgi的新手,並且我假定在karaf控制檯中執行osgi:instal mvn .....我會解決所有依賴關係。顯然不是 – santiagozky

回答

2

手工安裝每個依賴項將會很麻煩,但AFAIK沒有任何需要一個maven工件和所有依賴關係的鏈接 - 這會失敗,因爲它會停止在哪裏?

您可能會以每個日誌框架的每個版本(即使您安裝了pax日誌記錄)或錯誤的實現結束。

唉在Maven的情況下,我們目前無法申請semantic versioning或更高級別的requirement and capability的方式。 (雖然BND(Maven的捆綁,插件,bndtools)提出了一些合理的假設,在代碼級別)

Karaf功能(參見發行版的PDF手冊$ {KARAF_HOME})可以做很多事情,以減輕這一點,但它可以採取一些工作來設置。至少有一些方法可以生成特徵文件;

  1. 使用features-maven-plugin
  2. 使用maven-構建輔助插件發佈您手工製作的XML文件(費力,但你可以使用資源過濾維護版本)。
+0

的功能-maven-plugin generate-features-xml非常有幫助。它並沒有完全解決我的問題,但它至少花了我一半的時間。謝謝 – santiagozky

+0

我認爲大多數人都處於相同的位置,幸運的是OSGi聯盟正在努力解決這個問題。很高興幫助=) – earcam