You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

maven-bundle-plugin提示Bundle-Version值无效无法识别指定版本号

问题原因

你遇到的报错是OSGi bundle版本号规范的校验限制导致的,maven-bundle-plugin底层依赖bnd库执行Bundle-Version校验,你看到的正则[0-9]{1,9}(\.[0-9]{1,9}(\.[0-9]{1,9}(\.[0-9A-Za-z_-]+)?)?)?的规则是:

  • 版本号前三段(对应OSGi规范的major、minor、micro位)必须是1-9位的纯数字,每段最大值不超过999999999
  • 可选的第四段(qualifier位)可以是数字、字母、下划线、连字符的组合,无长度限制

你报错的版本号2.0.2021102095拆分后:

  • 第一段major:2(符合)
  • 第二段minor:0(符合)
  • 第三段micro:2021102095(共10位纯数字,超出了9位的限制,因此校验失败)

而能正常通过的版本号逻辑如下:

  • 2.0.202110201:第三段为9位纯数字,符合要求
  • 2.0.2021102099991-SNAPSHOT:版本号存在连字符-,会被识别为带qualifier段,拆分后第三段micro为9位以内数字,第四段为2021102099991-SNAPSHOT(属于qualifier段,无长度限制,符合要求)
解决方法

有两种可行的处理方案:

方案1:调整版本号格式(推荐)

符合OSGi规范的前提下调整版本号结构,规避前三段超长问题:

  • 方式一:缩短第三段的日期编码位数,确保不超过9位
  • 方式二:将日期段挪到第四位,比如把2.0.2021102095改成2.0.0.2021102095,此时第三段micro为0,日期部分属于无长度限制的qualifier段,可正常通过校验

方案2:关闭版本号校验

如果必须保留现有版本号规则,可以在maven-bundle-plugin的instructions配置中添加<_noversioncheck>true</_noversioncheck>,跳过默认的版本号正则校验,修改后的配置如下:

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <version>3.5.1</version>
  <extensions>true</extensions>
  <configuration>
    <instructions>
      <Bundle-SymbolicName>CustomXSLTMediator</Bundle-SymbolicName>
      <Bundle-Name>${project.name}</Bundle-Name>
      <Bundle-Version>${project.version}</Bundle-Version>
      <Export-Package>xslt</Export-Package>
      <DynamicImport-Package>*</DynamicImport-Package>
      <!-- 新增配置:关闭版本号校验 -->
      <_noversioncheck>true</_noversioncheck>
    </instructions>
  </configuration>
</plugin>

内容的提问来源于stack exchange,提问作者MadcowThaFirst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:54:06