如何在Gradle中操作OsgiManifest的结果导入包语句?
我想过滤掉导入包指令的条目,因为它是sun原生包 当前,生成的清单读取如何在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
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.*, *'
}
}
哦,太好了,我不知道一个人可以从