【问题标题】:How to get jar library name and version from String library name?如何从字符串库名称中获取 jar 库名称和版本?
【发布时间】:2013-04-03 16:05:44
【问题描述】:

我的目录中有很多 jar 文件:

  • some-lib-2.0.jar
  • some-lib-2.1-SNAPSHOT.jar
  • some-lib-3.RELEASE.jar
  • some-lib-R8.jar
  • some-lib-core-1.jar
  • some-lib-2.patch2.jar
  • some-lib-2-alpha-4.jar
  • some-lib.jar
  • some-lib2-4.0.jar

如何从文件名中获取库名和版本?

正则表达式 ((?:(?!-\d)\S)+)-(\S*\d\S*(?:-SNAPSHOT)?).jar$ 对提取名称和版本有效吗?

【问题讨论】:

    标签: java maven jar


    【解决方案1】:

    JAR 文件名中的版本号只是 Maven 构建的 JAR 的约定和默认值。它可能已被覆盖,并且仅从文件名中读取版本号并不总是可靠的。

    从 JAR 读取版本号的更可靠方法是查看 JAR 文件内部。根据 JAR 的构建方式,您有几个选项:

    • 查看 META-INF/maven/.../pom.properiespom.xml 并从中读取版本 - 这应该存在于 Maven 构建的二进制文件中
    • 如果 META-INF/MANIFEST.MF 中 Specification-VersionImplementation-Version 属性下的版本号,有时是版本号

    如果失败,则回退到从 JAR 名称中读取版本号,因为没有其他可用信息。

    【讨论】:

      【解决方案2】:

      不同库的命名策略可能不同,因此您无法使用一个规则从包名称中提取名称/版本,有关详细信息,您应该查看项目文档。

      如果是 Maven,您可以使用 finalName pom.xml 配置选项配置构建工件的最终名称。 Maven 文档在 pom 结构中提供了很好的 introduction。以下是文档中的示例:

      <build>
          ...
          <finalName>${artifactId}-${version}</finalName>
          ...
      </build>
      

      【讨论】:

        猜你喜欢
        • 2019-08-22
        • 2021-01-31
        • 2012-05-20
        • 2014-03-29
        • 2013-06-06
        • 2011-07-17
        • 2016-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多