Need help with os-maven-plugin?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

trustin
240 Stars 58 Forks Apache License 2.0 96 Commits 13 Opened issues

Description

A Maven plugin that sets various useful properties detected from ${os.name} and ${os.arch} properties.

Services available

!
?

Need anything else?

Contributors list

# 758
Java
C
Redis
Git
77 commits
# 2,617
Java
Go
Shell
circuit...
3 commits
# 137,394
Terrafo...
code-st...
git-hoo...
TypeScr...
1 commit
# 329,918
Shell
Go
C++
constra...
1 commit
# 173,602
Jupyter...
Machine...
Nim
Elixir
1 commit
# 660,822
Java
Shell
1 commit
# 259,627
Shell
Groovy
slack
hubot
1 commit
# 342,270
Shell
C
btrfs
Lua
1 commit
# 74,850
shiro
Groovy
Maven
build-m...
1 commit
# 481,981
jupyter
ldap-au...
Perl
CSS
1 commit
# 25,885
Java
Shell
Groovy
1 commit

os-maven-plugin
is a Maven extension/plugin that generates various useful platform-dependent project properties normalized from
${os.name}
and
${os.arch}
.

${os.name}
and
${os.arch}
are often subtly different between JVM and operating system versions or they sometimes contain machine-unfriendly characters such as whitespaces. This plugin tries to remove such fragmentation so that you can determine the current operating system and architecture reliably.

Generated properties

os-maven-plugin
detects the information about the current operating system and normalize it into more portable one.

Property:
os.detected.name

os.detected.name
is set to one of the following values, based on the lower-cased value of the
os.name
Java system property, whose non-alphanumeric characters are stripped out. e.g.
OS_400
->
os400
  • aix
    - if the value starts with
    aix
  • hpux
    - if the value starts with
    hpux
  • os400
    - if the value starts with
    os400
    and its following character is not a digit (e.g.
    os4000
    )
  • linux
    - if the value starts with
    linux
  • osx
    - if the value starts with
    macosx
    or
    osx
  • freebsd
    - if the value starts with
    freebsd
  • openbsd
    - if the value starts with
    openbsd
  • netbsd
    - if the value starts with
    netbsd
  • sunos
    - if the value starts with
    solaris
    or
    sunos
  • windows
    - if the value starts with
    windows
  • zos
    - if the value starts with
    zos

Property:
os.detected.arch

os.detected.arch
is set to one of the following values, based on the lower-cased value of the
os.arch
Java system property, whose non-alphanumeric characters are stripped out. e.g.
x86_64
->
x8664
  • x86_32
    - if the value is one of:
    x8632
    ,
    x86
    ,
    i386
    ,
    i486
    ,
    i586
    ,
    i686
    ,
    ia32
    ,
    x32
  • x86_64
    - if the value is one of:
    x8664
    ,
    amd64
    ,
    ia32e
    ,
    em64t
    ,
    x64
  • itanium_32
    - if the value is
    ia64n
  • itanium_64
    - if the value is one of:
    ia64
    ,
    ia64w
    ,
    itanium64
  • sparc_32
    - if the value is one of:
    sparc
    ,
    sparc32
  • sparc_64
    - if the value is one of:
    sparcv9
    ,
    sparc64
  • arm_32
    - if the value is one of:
    arm
    ,
    arm32
  • aarch_64
    - if the value is
    aarch64
  • mips_32
    - if the value is one of:
    mips
    ,
    mips32
  • mips_64
    - if the value is
    mips64
  • mipsel_32
    - if the value is one of:
    mipsel
    ,
    mips32el
  • mipsel_64
    - if the value is
    mips64el
  • ppc_32
    - if the value is one of:
    ppc
    ,
    ppc32
  • ppc_64
    - if the value is
    ppc64
  • ppcle_32
    - if the value is one of:
    ppcle
    ,
    ppc32le
  • ppcle_64
    - if the value is
    ppc64le
  • s390_32
    - if the value is
    s390
  • s390_64
    if the value is
    s390x
  • riscv
    if the value is
    riscv
  • e2k
    if the value is
    e2k

Note: The bitness part of this property relies on the bitness of the JVM binary, e.g. You'll get the property that ends with

_32
if you run a 32-bit JVM on a 64-bit OS.

Property:
os.detected.bitness

The bitness from whether

sun.arch.data.model
,
com.ibm.vm.bitmode
or
os.arch
, e.g.
64
,
32
. May report
31
for zOS legacy systems.

Note: This property signifies the bitness of the JVM binary, e.g. You'll get

32
if you run a 32-bit JVM on a 64-bit OS.

Property:
os.detected.version.*

os.detected.version
and its sub-properties are operation system dependent version number that may indicate the kernel or OS release version. They are generated from the
os.version
Java system property.
os-maven-plugin
find the version number using the following regular expression:
((\\d+)\\.(\\d+)).*
  • os.detected.version.major
    - the first matching digits
  • os.detected.version.minor
    - the second matching digits
  • os.detected.version
    -
    .
    e.g.
    3.1

Property:
os.detected.classifier

You can also use the

${os.detected.classifier}
property, which is a shortcut of
${os.detected.name}-${os.detected.arch}
.

Property:
os.detected.release.*
(Linux-only)

See the section 'Customized deployments for specific releases of Linux' below.

Enabling
os-maven-plugin
on your Maven project

Add the extension to your

pom.xml
like the following:
  
    
      
        kr.motd.maven
        os-maven-plugin
        1.7.0
      
    
  

Using Gradle?

Use the plugin from Google.

Adding a platform-dependent dependency

Use

${os.detected.classifier}
as the classifier of the dependency:
  
    
      com.example
      my-native-library
      1.0.0
      ${os.detected.classifier}
    
  

Generating a platform-dependent dependency

Use

${os.detected.classifier}
as the classifier of the produced JAR:
  
    
      
        maven-jar-plugin
        
          ${os.detected.classifier}
        
      
    
  

Customized deployments for specific releases of Linux

If you need to customize your deployment based on a specific release of Linux, a few other variables may be made available.

  • ${os.detected.release}
    : provides the ID for the linux release.
  • ${os.detected.release.version}
    : provides version ID for this linux release. Only available if
    ${os.detected.release}
    is also available.
  • ${os.detected.release.like.}
    : Identifies a linux release that this release is "like" (for example,
    ubuntu
    is "like"
    debian
    ). Only available if
    ${os.detected.release}
    is also available. An entry will always be made for
    os.detected.release.like.${os.detected.release}
    .

For most Linux distributions, these values are populated from the

ID
,
ID_LIKE
, and
VERSION_ID
entries in
/etc/os-release
or
/usr/lib/os-release
.

Older variants of Red Hat

If

/etc/os-release
and
/usr/lib/os-release
are unavailable, then
/etc/redhat-release
is inspected. If it contains
CentOS
,
Fedora
, or
Redhat Enterprise Linux
then
${os.detected.release}
will be set to
centos
,
fedora
, or
rhel
respectively (other variants are unsupported). "Like" entries will be created for
${os.detected.release}
as well as
rhel
and
fedora
. The
${os.detected.release.version}
variable is currently not set.

Customizing the classifier

You can configure the

os-maven-plugin
to automatically append a particular "like" value to
${os.detected.classifier}
. This greatly simplifies the deployment for artifacts that are different across Linux distributions. The plugin looks for a property named
os.detection.classifierWithLikes
, which is a comma-separated list of "like" values. The first value found which matches an existing
${os.detected.release.like.}
property will be automatically appended to the classifier.
  
    debian,rhel
  

  
    
      
        kr.motd.maven
        os-maven-plugin
        1.7.0
      
    
  

This will result in a

${os.detected.classifier}
of
linux--debian
on debian-like systems,
linux--rhel
on rhel systems, and the default of
-
on everything else.

Issues with Eclipse m2e or other IDEs

If you are using IntelliJ IDEA, you should not have any problem.

If you are using Eclipse, you need to install an additional Eclipse plugin because m2e does not evaluate the extension specified in a

pom.xml
. Download
os-maven-plugin-1.7.0.jar
and put it into the
/dropins
directory.

(As you might have noticed,

os-maven-plugin
is a Maven extension, a Maven plugin, and an Eclipse plugin.)

Alternatively, in some projects it may be possible to add the plugin to the build lifecycle instead of using it as an extension. Remove the plugin from the

 section of the POM and place it into the 
 section instead:
  kr.motd.maven
  os-maven-plugin
  1.7.0
  
    
      initialize
      
        detect
      
    
  

If you are using other IDEs such as NetBeans, you need to set the system properties

os-maven-plugin
sets manually when your IDE is launched. You usually use JVM's
-D
flags like the following:
-Dos.detected.name=linux -Dos.detected.arch=x86_64 -Dos.detected.classifier=linux-x86_64

Alternatively, you can hardcode the properties in the local Maven settings. Add the following sections to

settings.xml
(specify property values according to your OS configuration):
  
    os-properties
    
      linux
      x86_64
      linux-x86_64
    
  



  os-properties

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.