2017-02-11 66 views
1

親愛的StackOverflow用戶如何避免搖籃的OSGi插件生成的私人包和導入包進入出口pacakge進入嵌入式依賴

我有一個gradle這個項目,我希望把神器成一個OSGi包。在這個包,我有:

  • 包,我不希望導出(在清單的Export-Package項可能不會出現)
  • 依賴,我想嵌入(可能不會出現在清單的Import-Package條目)

後一點修修補補我想出了以下gradle.build文件,它做什麼,我打算,但也許不是最清潔的方式可能,利用BND ...

group 'com.mycompany' 
version '1.0.0' 

apply plugin: 'java' 
apply plugin: 'osgi' 

repositories { 
    jcenter() 
} 

dependencies{ 
    compile 'org.osgi:org.osgi.framework:1.8.0' //provided 
    compile 'com.google.code.gson:gson:2.8.0' //embedded 
} 


jar { 
    //embedding the gson dependency 
    from({ 
     def x = configurations.compile.find({ 
      return it.getName().contains('gson') 
     }) 
     def tree = zipTree(x) 
     return tree 
    }) 

    //explicitly building manifest entries 
    manifest { 
     instruction 'Bundle-Vendor', 
       'My Company' 
     instruction 'Bundle-Activator', 
       'com.mycompany.mybundle.Activator' 
     instruction 'Import-Package', 
       '!com.google.gson',   
       '*' 
     instruction 'Export-Package', 
       /com.mycompany.mybundle;version="${version}"/ 
    } 
} 

是否有可能以更清潔的方式完成此操作?我主要是想避免兩兩件事:具有手動編寫具有嵌入式依賴(GSON)的內容手動複製到我的罐子的進口和出口包裝項目

    我認爲bnd(底層的osgi插件)可以爲我做到這一點,但迄今爲止我嘗試過的(即使我將它們添加爲私有包)bnd仍然導出所有內容並導入gson包以及它不會添加gson類到罐子

  • 回答

    4

    你會b使用OSGi的Bnd Gradle plugin更好。它由bnd的開發人員撰寫和支持,他們知道OSGi的一兩件事情。

    +0

    就你而言,你可能應該看看非工作區構建的Bnd Gradle插件:biz.aQute.bnd.builder。 https://github.com/bndtools/bnd/tree/master/biz.aQute.bnd.gradle#gradle-plugin-for-non-workspace-builds –