一、什么是os-maven-plugin
os-maven-plugin 是一个 Maven 扩展/插件,它根据 ${os.name} 和 ${os.arch} 生成各种有用的、与平台相关的项目属性,并将这些属性标准化。${os.name} 和 ${os.arch} 在不同的 JVM 和操作系统版本之间往往存在细微的差异,或者它们有时包含对机器不友好的字符,如空格。此插件试图消除这种碎片化,以便您可以可靠地确定当前的操作系统和架构。
插件生成的属性包括:
-
os.detected.name被设置为以下值之一,基于 Java 系统属性os.name的小写值,且其中的非字母数字字符被移除。例如:OS_400->os400aix- 如果值以aix开头hpux- 如果值以hpux开头os400- 如果值以os400开头,且其后的字符不是数字(例如os4000不符合条件)linux- 如果值以linux开头osx- 如果值以mac或osx开头freebsd- 如果值以freebsd开头openbsd- 如果值以openbsd开头netbsd- 如果值以netbsd开头sunos- 如果值以solaris或sunos开头windows- 如果值以windows开头zos- 如果值以zos开头
-
os.detected.arch被设置为以下值之一,基于 Java 系统属性os.arch的小写值,且其中的非字母数字字符被移除。例如:x86_64->x8664x86_32- 如果值是以下之一:x8632、x86、i386、i486、i586、i686、ia32、x32x86_64- 如果值是以下之一:x8664、amd64、ia32e、em64t、x64itanium_32- 如果值是ia64nitanium_64- 如果值是以下之一:ia64、ia64w、itanium64sparc_32- 如果值是以下之一:sparc、sparc32sparc_64- 如果值是以下之一:sparcv9、sparc64arm_32- 如果值是以下之一:arm、arm32aarch_64- 如果值是aarch64mips_32- 如果值是以下之一:mips、mips32mips_64- 如果值是mips64mipsel_32- 如果值是以下之一:mipsel、mips32elmipsel_64- 如果值是mips64elppc_32- 如果值是以下之一:ppc、ppc32ppc_64- 如果值是ppc64ppcle_32- 如果值是以下之一:ppcle、ppc32leppcle_64- 如果值是ppc64les390_32- 如果值是s390s390_64- 如果值是s390xriscv- 如果值是riscv或riscv32riscv64- 如果值是riscv64e2k- 如果值是e2kloongarch_64- 如果值是loongarch64
注意:此属性的位数部分依赖于 JVM 二进制的位数,例如,如果你在 64 位操作系统上运行 32 位 JVM,你将获得以
_32结尾的属性。 -
os.detected.bitness:表示 JVM 二进制的位数,例如64、32。对于 zOS 遗留系统,可能会报告为31。 -
os.detected.version.*:os.detected.version及其子属性是依赖于操作系统的版本号,可能表示内核或操作系统的发行版本。它们是从 Java 系统属性os.version中生成的。os-maven-plugin使用以下正则表达式来查找版本号:((\\d+)\\.(\\d+)).*os.detected.version.major- 第一个匹配的数字序列os.detected.version.minor- 第二个匹配的数字序列os.detected.version-<os.detected.version.major>.<os.detected.version.minor>,例如3.1
这样,
os-maven-plugin能够从os.version属性中提取出主要的和次要的版本号,并将它们分别存储在os.detected.version.major和os.detected.version.minor中,同时组合这两个版本号形成os.detected.version。 -
os.detected.classifier:是${os.detected.name}-${os.detected.arch}的简写。如:windows-x86_64 -
os.detected.release.*(仅限 Linux):用于特定 Linux 发行版的自定义部署。
要在 Maven 项目中启用 os-maven-plugin,请在 pom.xml 中添加以下扩展:
<project><build><extensions><extension><groupId>kr.motd.maven</groupId><artifactId>os-maven-plugin</artifactId><version>1.7.1</version></extension></extensions></build>
</project>
这样配置后,Maven 项目就可以使用 os-maven-plugin 提供的标准化操作系统和架构属性了。
二、在项目中使用变量
使用${os.detected.classifier}变量
<project><dependencies><dependency><groupId>com.example</groupId><artifactId>my-native-library</artifactId><version>1.0.0</version><classifier>${os.detected.classifier}</classifier></dependency></dependencies>
</project>
参考
- os-maven-plugin