我有一個劇本的Gradle(編輯剪輯):問題,包括一個罐子到OSGi包
apply plugin:'osgi'
apply plugin:'eclipse'
apply plugin:'groovy'
....
dependencies {
....
compile 'org.codehaus.groovy:groovy-all:2.4.4'
compile 'com.gmongo:gmongo:1.5'
}
jar {
manifest {
....
instruction 'Embed-Dependency', '*;scope=compile|runtime'
instruction 'Embed-Transitive', 'true'
instruction 'Bundle-ClassPath', '.,gmongo-1.5.jar'
}
from {
configurations.compile.findAll{ !it.directory && it.name.startsWith('gmongo') }
}
}
只要gmongo
不提供適當的包 - 清單,我必須把它作爲一個依賴。
產生的罐子結構爲:
/
|..com/
|..META-INF/
|..gmongo-1.5.jar
MANIFEST.INF:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bnd-LastModified: 1461227335334
Bundle-ActivationPolicy: lazy
Embed-Dependency: *;scope=compile|runtime
Import-Package: com.gmongo,com.mongodb;version="[3.2,4)",groovy.lang;v
ersion="[2.4,3)",....."
Tool: Bnd-2.1.0.20130426-122213
Export-Package: com.mozaiq.echo;version="1.0.0";uses:="com.gmongo,groo
vy.lang,javax.servlet,javax.servlet.http,org.osgi.framework"
Bundle-ClassPath: .,gmongo-1.5.jar
Embed-Transitive: true
Created-By: 1.8.0_72 (Oracle Corporation)
安裝時我得到
0 ERROR>試圖解決束時發生錯誤groovyecho.jar.20160426-110910406.jar!
org.osgi.framework.BundleException:無法解析groovyecho:包com.gmongo
我在做什麼錯?
UPDATE:
即使我解壓gmongo.jar
的類:
jar {
....
from {
zipTree configurations.compile.find{ !it.directory && it.name.startsWith('gmongo') }
}
}
我得到了同樣的錯誤。
摘要:
instruction 'Import-Package', '!com.gmongo,*'
行之有效的非賈裏德類文件。
,使其處於原始jar文件的工作,我只好也加入
instruction 'Bundle-ClassPath', '.,gmongo-1.5.jar'
賓果! '!com.gmongo'處理解壓縮的類文件。爲了使它適用於mongo.jar,我必須添加'指令'Bundle-ClassPath','。,gmongo-1.5.jar' – injecteer
Bnd使用'Embed-Dependency'指令來計算您的導入bundle ...所以你不需要在回答中提出的'Import-Package' ...因爲你使用默認的Gradle'osgi'插件,Bnd實際上不會更改jar,只是清單...這就是爲什麼您仍然需要在'jar'塊中添加'from'指令來嵌入jar,並添加'Bundle-ClassPath'指令的原因。如果你想Bnd做到這一點,你可以使用TomDmitriev的其他[Gradle osgi插件](https://github.com/TomDmitriev/gradle-bundle-plugin)。 – Renato
'Embed-Dependency'不是bnd支持的東西。它由Apache Felix maven-bundle-plugin支持。 –