gradle - 如何在 Gradle 中操作 Osgi list 的生成的 Import-Package 语句?

标签 gradle osgi manifest

我想过滤掉Import-Package指令的条目,因为它是一个sun native 包。

当前生成的 list 读取

Import-Package: javax.net.ssl,javax.security.auth.kerberos,org.jivesof
 tware.smack;version="[4.1,5)",org.jivesoftware.smack.initializer;vers
 ion="[4.1,5)",org.jivesoftware.smack.util.stringencoder;version="[4.1
 ,5)",sun.security.util

但是,我想删除 sun.security.util,这样它就变成了

Import-Package: javax.net.ssl,javax.security.auth.kerberos,org.jivesof
 tware.smack;version="[4.1,5)",org.jivesoftware.smack.initializer;vers
 ion="[4.1,5)",org.jivesoftware.smack.util.stringencoder;version="[4.1
 ,5)"

我认为类似的事情应该是可能的

afterEvaluate { project ->
    def importPackages = ((OsgiManifest) project.jar.manifest).instructionValue('Import-Packages')
    def filteredImportPackages = importPackages.findAll { it != 'sun.security.util' }
    ((OsgiManifest) project.jar.manifest).instructionReplace('Import-Packages', filteredImportPackages)
}

但这会导致 ClassCastException:

Cannot cast object 'org.gradle.api.java.archives.internal.DefaultManifest@136bec49' with class 'org.gradle.api.java.archives.internal.DefaultManifest' to class 'org.gradle.api.plugins.osgi.OsgiManifest'

通过 gradle 配置后,如何操作 (Osgi)Manifest?

最佳答案

您应该能够仅通过使用如下 bnd 指令来删除 sun.security.util 软件包:

jar {
    manifest { // the manifest of the default jar is of type OsgiManifest
        instruction 'Import-Package', '!sun.security.*, *'
    }
}

关于gradle - 如何在 Gradle 中操作 Osgi list 的生成的 Import-Package 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25931690/

相关文章:

java - jar文件的问题

android - 为什么要为GRADLE(Android Studio)设置环境变量?

java - 如何发布常规的非 Android Java 库,以便通过 Maven 和 Gradle 构建脚本将其包含在 Java 项目中?

gradle - 如何在gradle任务中传递nexus凭证以下载工件

gradle - 如何在Gradle构建中生成Enunciate文档

java - 是否可以使用maven-bundle-plugin(bnd)生成plugin.xml

java - mangen 将 'Bundle-ManifestVersion: 1' 添加到 list 中,但 felix 似乎不接受值 1

java - Jasperreports OSGI (fuse/karaf)

android - 如何在android中处理多个应用程序类

java - 在 list 文件中设置主类的路径