2013-06-01 103 views
1

我有一個使用Gradle構建工具構建OSGi包的簡單用例。如果構建路徑中存在Java文件,則構建成功,否則失敗。Gradle中的OSGi包構建問題

我在gradle腳本里面使用'osgi'插件,並試圖在沒有任何java文件的情況下構建。構建總是失敗,以下錯誤:

無法MANIFEST.MF複製到

我相信一定是有辦法做到這一點的搖籃,但不能罰款。任何想法可以做什麼來解決這個取決於你的經驗。

回答

0

--stacktrace運行表明osgi插件不與其中兩個osgijava插件應用的情況下正確處理,但沒有Java代碼存在。刪除java插件應該可以解決問題。

2

我今天也遇到過這個問題,@Peter的解決方案對我沒有幫助(我沒有在第一個地方應用java插件......)。然而,經過幾個小時的谷歌搜索,我發現this thread,這幫助我找到了問題。

基本上,它似乎發生錯誤(as Peter stated)時,沒有類文件的罐子被發現 - 我的猜測是因爲該插件則無法掃描類,以此爲基礎的所有ImportExport信息包名。

我的解決辦法是添加以下的清單規範:

classesDir = theSourceSet.output.classesDir 
classpath = theSourceSet.runtimeClasspath 

在我的實際構建代碼,我遍歷所有源設置爲他們創造jar的任務,這樣的話它看起來像這樣:

sourceSets.each { ss -> 
    assemble.dependsOn task("jar${ss.name.capitalize()}", type: Jar, dependsOn: ss.getCompileTaskName('Java')) { 
     from ss.output 
     into 'classes' 

     manifest = osgiManifest { 
      classesDir = ss.output.classesDir 
      classpath = ss.runtimeClasspath 
      // Other properties, like name and symbolicName, also set based on 
      // the name of the source set 
     } 

     baseName = ss.name 
    } 
} 
0

當java代碼出現時,我也有同樣的問題。 添加這兩行到osgiManifest閉合固定的問題:

classesDir = sourceSets.main.output.classesDir 
classpath = sourceSets.main.runtimeClasspath   

- 埃裏克