如何在Liferay模块中通过Bundle-SymbolicName生成Jar包?
使用Bundle-SymbolicName命名Liferay模块Jar包
你可以通过两种可靠的方式在Gradle中读取bnd.bnd里的Bundle-SymbolicName属性,以此来命名Jar文件:
方法一:直接解析bnd.bnd文件(兼容所有场景)
如果需要手动控制解析逻辑,可以直接读取并解析bnd文件的键值对,处理可能的后缀或变量:
allprojects { apply plugin: 'java' jar.archiveFileName = { def bndFile = file('bnd.bnd') if (bndFile.exists()) { def bndProps = new Properties() bndFile.withReader { reader -> bndProps.load(reader) } def symbolicName = bndProps['Bundle-SymbolicName'] if (symbolicName) { // 移除SymbolicName后可能附带的版本参数(如`com.example.module;version=1.0.0`) symbolicName = symbolicName.split(';')[0].trim() return "${symbolicName}.jar" } } // 兜底方案:如果读取失败,使用项目名称命名 return "${project.name}.jar" }() }
方法二:利用bnd插件的内置属性(更简洁)
Liferay模块默认依赖biz.aQute.bnd插件,该插件会自动解析bnd文件并暴露bundleSymbolicName属性,直接使用即可:
allprojects { apply plugin: 'java' apply plugin: 'biz.aQute.bnd' // 确保插件已应用,多数Liferay项目默认已包含 jar.archiveFileName = "${bundleSymbolicName}.jar" }
这个方法会自动处理bnd文件中的变量替换(比如Bundle-SymbolicName: ${project.group}.${project.name}),无需手动解析,是更推荐的方式。
注意事项
- 确保所有子模块都存在
bnd.bnd文件且定义了Bundle-SymbolicName属性; - 方法一中的兜底逻辑可以避免因文件缺失或属性未定义导致的构建失败。
内容的提问来源于stack exchange,提问作者Carlos Durán
相关产品推荐
相关产品推荐

