Gradle 有一个类,它是一个扩展的 jar 清单:OsgiManifest
https://docs.gradle.org/current/javadoc/org/gradle/api/plugins/osgi/OsgiManifest.html
StackOverflow上有一篇文章显示了类似的用法:
如何为运行时依赖项添加导入包指令?
相关的渐变块如下所示:
apply plugin: 'java'
apply plugin: 'osgi'
jar {
baseName = 'awesome'
manifest {
name = 'An Awesome Application'
symbolicName = 'com.example.awesome'
instruction 'Import-Package', 'org.springframework.orm', '*'
}
}
如果您有现有的清单,并且想要使用自己的自定义文件,则可以通过在 jar 闭包中设置清单文件位置来执行此操作:
jar {
manifest {
def manif = "${resourcesDir}/MANIFEST.MF"
if (new File(manif).exists()) {
from file(manif)
}
else{
name = 'overwrittenSpecialOsgiName'
instruction 'Private-Package', 'org.mycomp.somepackage'
instruction 'Bundle-Vendor', 'MyCompany'
instruction 'Bundle-Description', 'Platform2: Metrics'
}
}
}
Gradle清单的文档可以在这里找到:https://docs.gradle.org/current/javadoc/org/gradle/api/java/archives/Manifest.html
对于您的“其他问题”:
还有其他用于构建OSGI捆绑包的Gradle插件,在某些情况下,包括来自其他OSGI捆绑包的依赖项。
例如,有Gradle Bundle插件,它使用bnd工具,允许您指定包括传递依赖关系,甚至排除不需要的依赖关系。例如:
jar {
manifest {
attributes 'Implementation-Title': 'Bundle Quickstart', // Will be added to manifest
'Import-Package': '*' // Will be overwritten by the instuctions below
}
}
bundle {
includeTransitiveDependencies = true
instructions << [
'Bundle-Activator': 'foo.bar.MyBundleActivator',
'Import-Package': 'foo.*',
'-sources': true
]
instruction 'Export-Package', '*' // Specify an individual instruction
instruction '-wab', ''
}
还有Gradle osgi-run插件,默认情况下包括传递依赖项:
dependencies {
// all your usual dependencies
...
osgiRuntime( "your:dependency:1.0" ) {
transitive = false // transitive dependencies not included in OSGi runtime
}
}
希望这足以让你继续前进。