Jenkins DSL脚本取pom.xml版本用于nexusArtifactUploader报错求助
解决Jenkins DSL中获取Pom版本号报错的问题
这个报错groovy.lang.MissingPropertyException: No such property: version for class: groovy.lang.Binding其实很好理解——你在脚本里直接引用了version变量,但这个变量根本没被定义,Groovy找不到它呀!
你已经通过readMavenPom拿到了pom对象,里面确实包含版本号,但你要么没把这个属性赋值给version变量,要么在nexusArtifactUploader里没正确引用pom.version,而是直接写了version。
给你两种修正方式,选哪种都可以:
方式一:直接在nexus配置中使用pom.version
stage('Nexus') { steps { script { def pom = readMavenPom file: 'pom.xml' echo "读取到的版本号:${pom.version}" nexusArtifactUploader( nexusVersion: 'nexus3', protocol: 'http', nexusUrl: '你的Nexus服务地址', // 补全你的实际地址 groupId: pom.groupId, // 还能直接复用pom里的groupId、artifactId等属性 version: pom.version, // 这里一定要用pom.version,不能直接写version repository: '你的目标仓库名', artifactId: pom.artifactId, file: 'target/your-artifact.jar', // 替换成你要上传的文件路径 type: 'jar' // 根据你的制品类型调整,比如war、pom等 ) } } }
方式二:先把版本号赋值给变量再使用
如果后续还要多次用到版本号,先赋值给变量会更清晰易读:
stage('Nexus') { steps { script { def pom = readMavenPom file: 'pom.xml' def projectVersion = pom.version // 把pom里的version赋值给变量 echo "当前项目版本:${projectVersion}" nexusArtifactUploader( nexusVersion: 'nexus3', protocol: 'http', nexusUrl: '你的Nexus服务地址', groupId: pom.groupId, version: projectVersion, // 这里用定义好的变量 repository: '你的目标仓库名', artifactId: pom.artifactId, file: 'target/your-artifact.jar', type: 'jar' ) } } }
额外注意事项
- 确认
readMavenPom的file参数路径正确,如果pom.xml不在Jenkins工作目录的根路径,要写成相对路径,比如file: 'modules/my-subproject/pom.xml' - 检查
nexusArtifactUploader的参数是否符合你使用的插件版本,不同版本的插件参数可能略有差异,比如有些版本可能需要指定classifier等额外参数
内容的提问来源于stack exchange,提问作者user3847894
相关产品推荐
相关产品推荐

