我想过滤掉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/