我有一個使用Gradle構建工具構建OSGi包的簡單用例。如果構建路徑中存在Java文件,則構建成功,否則失敗。Gradle中的OSGi包構建問題
我在gradle腳本里面使用'osgi'插件,並試圖在沒有任何java文件的情況下構建。構建總是失敗,以下錯誤:
無法MANIFEST.MF複製到
我相信一定是有辦法做到這一點的搖籃,但不能罰款。任何想法可以做什麼來解決這個取決於你的經驗。
我有一個使用Gradle構建工具構建OSGi包的簡單用例。如果構建路徑中存在Java文件,則構建成功,否則失敗。Gradle中的OSGi包構建問題
我在gradle腳本里面使用'osgi'插件,並試圖在沒有任何java文件的情況下構建。構建總是失敗,以下錯誤:
無法MANIFEST.MF複製到
我相信一定是有辦法做到這一點的搖籃,但不能罰款。任何想法可以做什麼來解決這個取決於你的經驗。
與--stacktrace
運行表明osgi
插件不與其中兩個osgi
和java
插件應用的情況下正確處理,但沒有Java代碼存在。刪除java
插件應該可以解決問題。
我今天也遇到過這個問題,@Peter的解決方案對我沒有幫助(我沒有在第一個地方應用java插件......)。然而,經過幾個小時的谷歌搜索,我發現this thread,這幫助我找到了問題。
基本上,它似乎發生錯誤(as Peter stated)時,沒有類文件的罐子被發現 - 我的猜測是因爲該插件則無法掃描類,以此爲基礎的所有Import
和Export
信息包名。
我的解決辦法是添加以下的清單規範:
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
}
}
當java代碼出現時,我也有同樣的問題。 添加這兩行到osgiManifest閉合固定的問題:
classesDir = sourceSets.main.output.classesDir
classpath = sourceSets.main.runtimeClasspath
- 埃裏克