Hi,
Using go execute command I tried to run something like ‘mvn -pl test:test compile’. However, the go exec return an error ’ Unable to parse command line options: Unrecognized option: -pl test:test compile’.
Note that if I run the command on command line it work perfectly. I have the same problem with --projects.
Below, is a simple project I setup to demonstrate my problem. The command is mvn --version, the second the one in problem, and when running it using the bash as the command, then it is executed seamlessly.
Any idea why my second command is returning an error?
Go code:
package main
import (
"os/exec"
"fmt"
"strings"
"bytes"
)
func main() {
//Calling mvn using bash since without it, we have an syntax error when using -pl (--projects) options
cmd := exec.Command("mvn", "--version")
//cmd := exec.Command("mvn", "compile")
funcName(cmd)
cmd2 := exec.Command("mvn", "-pl test:test compile")
//cmd := exec.Command("mvn", "compile")
funcName(cmd2)
cmd3 := exec.Command("bash", "-c", "mvn -pl test:test compile")
funcName(cmd3)
}
func funcName(cmd *exec.Cmd) {
cmd.Dir = "test"
fmt.Println("--------------------------------------------------------------------------------------", )
fmt.Println("Executing:", "'"+strings.Join(cmd.Args, " ")+"'", "With working directory:", cmd.Dir)
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr
err := cmd.Run()
outStr, errStr := string(stdout.Bytes()), string(stderr.Bytes())
fmt.Printf("Command fail with: %s", errStr)
if err != nil {
fmt.Printf("Command fail with: %s\n", err)
}
fmt.Printf("Execution log: %s", outStr)
fmt.Println("--------------------------------------------------------------------------------------", )
}
output:
Executing: 'mvn --version' With working directory: test
Command fail with: Execution log: Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T14:49:05-05:00)
Maven home: /home/dprevost/mfxdev-snapshot/software/apache-maven-3.5.3
Java version: 1.8.0_92, vendor: Oracle Corporation
Java home: /home/dprevost/mfxdev-snapshot/software/jdk1.8.0_92/jre
Default locale: en_CA, platform encoding: UTF-8
OS name: "linux", version: "4.15.0-22-generic", arch: "amd64", family: "unix"
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
Executing: 'mvn -pl test:test compile' With working directory: test
Command fail with: Unable to parse command line options: Unrecognized option: -pl test:test compile
Command fail with: exit status 1
Execution log:
usage: mvn [options] [<goal(s)>] [<phase(s)>]
Options:
-am,--also-make If project list is specified, also
build projects required by the
list
-amd,--also-make-dependents If project list is specified, also
build projects that depend on
projects on the list
-B,--batch-mode Run in non-interactive (batch)
mode (disables output color)
-b,--builder <arg> The id of the build strategy to
use
-C,--strict-checksums Fail the build if checksums don't
match
-c,--lax-checksums Warn if checksums don't match
-cpu,--check-plugin-updates Ineffective, only kept for
backward compatibility
-D,--define <arg> Define a system property
-e,--errors Produce execution error messages
-emp,--encrypt-master-password <arg> Encrypt master security password
-ep,--encrypt-password <arg> Encrypt server password
-f,--file <arg> Force the use of an alternate POM
file (or directory with pom.xml)
-fae,--fail-at-end Only fail the build afterwards;
allow all non-impacted builds to
continue
-ff,--fail-fast Stop at first failure in
reactorized builds
-fn,--fail-never NEVER fail the build, regardless
of project result
-gs,--global-settings <arg> Alternate path for the global
settings file
-gt,--global-toolchains <arg> Alternate path for the global
toolchains file
-h,--help Display help information
-l,--log-file <arg> Log file where all build output
will go (disables output color)
-llr,--legacy-local-repository Use Maven 2 Legacy Local
Repository behaviour, ie no use of
_remote.repositories. Can also be
activated by using
-Dmaven.legacyLocalRepo=true
-N,--non-recursive Do not recurse into sub-projects
-npr,--no-plugin-registry Ineffective, only kept for
backward compatibility
-npu,--no-plugin-updates Ineffective, only kept for
backward compatibility
-nsu,--no-snapshot-updates Suppress SNAPSHOT updates
-o,--offline Work offline
-P,--activate-profiles <arg> Comma-delimited list of profiles
to activate
-pl,--projects <arg> Comma-delimited list of specified
reactor projects to build instead
of all projects. A project can be
specified by [groupId]:artifactId
or by its relative path
-q,--quiet Quiet output - only show errors
-rf,--resume-from <arg> Resume reactor from specified
project
-s,--settings <arg> Alternate path for the user
settings file
-t,--toolchains <arg> Alternate path for the user
toolchains file
-T,--threads <arg> Thread count, for instance 2.0C
where C is core multiplied
-U,--update-snapshots Forces a check for missing
releases and updated snapshots on
remote repositories
-up,--update-plugins Ineffective, only kept for
backward compatibility
-v,--version Display version information
-V,--show-version Display version information
WITHOUT stopping build
-X,--debug Produce execution debug output
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
Executing: 'bash -c mvn -pl test:test compile' With working directory: test
Command fail with: Execution log: [INFO] Scanning for projects...
[INFO]
[INFO] -----------------------------< test:test >------------------------------
[INFO] Building test 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ test ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ test ---
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.560 s
[INFO] Finished at: 2018-06-12T11:16:10-04:00
[INFO] ------------------------------------------------------------------------
--------------------------------------------------------------------------------------