如何在Gradle中操作OsgiManifest的结果导入包语句?

如何在Gradle中操作OsgiManifest的结果导入包语句?,gradle,osgi,manifest,Gradle,Osgi,Manifest,我想过滤掉导入包指令的条目,因为它是sun原生包 当前,生成的清单读取 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

我想过滤掉导入包指令的条目,因为它是sun原生包

当前,生成的清单读取

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配置了OsgiManifest之后,我如何操作它?

您应该能够使用如下bnd指令删除sun.security.util包:

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

哦,太好了,我不知道一个人可以从