github.com/bigcommerce/nomad@v0.9.3-bc/drivers/java/utils.go (about)

     1  package java
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"os/exec"
     7  	"regexp"
     8  	"strings"
     9  )
    10  
    11  var javaVersionCommand = []string{"java", "-version"}
    12  
    13  func javaVersionInfo() (version, runtime, vm string, err error) {
    14  	var out bytes.Buffer
    15  
    16  	cmd := exec.Command(javaVersionCommand[0], javaVersionCommand[1:]...)
    17  	cmd.Stdout = &out
    18  	cmd.Stderr = &out
    19  	err = cmd.Run()
    20  	if err != nil {
    21  		err = fmt.Errorf("failed to check java version: %v", err)
    22  		return
    23  	}
    24  
    25  	version, runtime, vm = parseJavaVersionOutput(out.String())
    26  	return
    27  }
    28  
    29  func parseJavaVersionOutput(infoString string) (version, runtime, vm string) {
    30  	infoString = strings.TrimSpace(infoString)
    31  
    32  	lines := strings.Split(infoString, "\n")
    33  	if strings.Contains(lines[0], "Picked up _JAVA_OPTIONS") {
    34  		lines = lines[1:]
    35  	}
    36  
    37  	if len(lines) < 3 {
    38  		// unexpected output format, don't attempt to parse output for version
    39  		return "", "", ""
    40  	}
    41  
    42  	versionString := strings.TrimSpace(lines[0])
    43  
    44  	re := regexp.MustCompile(`version "([^"]*)"`)
    45  	if match := re.FindStringSubmatch(lines[0]); len(match) == 2 {
    46  		versionString = match[1]
    47  	}
    48  
    49  	return versionString, strings.TrimSpace(lines[1]), strings.TrimSpace(lines[2])
    50  }