in pkg/util/maven/maven_command.go [44:146]
func (c *Command) Do(ctx context.Context) error {
if err := generateProjectStructure(c.context, c.project); err != nil {
return err
}
// Prepare maven wrapper helps when running the builder as Pod as it makes
// the builder container, Maven agnostic
if err := c.prepareMavenWrapper(ctx); err != nil {
return err
}
mvnCmd := "./mvnw"
if c, ok := os.LookupEnv("MAVEN_CMD"); ok {
mvnCmd = c
}
args := make([]string, 0)
args = append(args, c.context.AdditionalArguments...)
if c.context.LocalRepository != "" {
if _, err := os.Stat(c.context.LocalRepository); err == nil {
args = append(args, "-Dmaven.repo.local="+c.context.LocalRepository)
}
}
settingsPath := filepath.Join(c.context.Path, "settings.xml")
if settingsExists, err := util.FileExists(settingsPath); err != nil {
return err
} else if settingsExists {
args = append(args, "--global-settings", settingsPath)
}
settingsPath = filepath.Join(c.context.Path, "user-settings.xml")
if settingsExists, err := util.FileExists(settingsPath); err != nil {
return err
} else if settingsExists {
args = append(args, "--settings", settingsPath)
}
settingsSecurityPath := filepath.Join(c.context.Path, "settings-security.xml")
if settingsSecurityExists, err := util.FileExists(settingsSecurityPath); err != nil {
return err
} else if settingsSecurityExists {
args = append(args, "-Dsettings.security="+settingsSecurityPath)
}
if !util.StringContainsPrefix(c.context.AdditionalArguments, "-Dmaven.artifact.threads") {
args = append(args, "-Dmaven.artifact.threads="+strconv.Itoa(runtime.GOMAXPROCS(0)))
}
if !util.StringSliceExists(c.context.AdditionalArguments, "-T") {
args = append(args, "-T", strconv.Itoa(runtime.GOMAXPROCS(0)))
}
cmd := exec.CommandContext(ctx, mvnCmd, args...)
cmd.Dir = c.context.Path
var mavenOptions string
if len(c.context.ExtraMavenOpts) > 0 {
// Inherit the parent process environment
env := os.Environ()
mavenOpts, ok := os.LookupEnv("MAVEN_OPTS")
if !ok {
mavenOptions = strings.Join(c.context.ExtraMavenOpts, " ")
env = append(env, "MAVEN_OPTS="+mavenOptions)
} else {
var extraOptions []string
options := strings.Fields(mavenOpts)
for _, extraOption := range c.context.ExtraMavenOpts {
// Basic duplicated key detection, that should be improved
// to support a wider range of JVM options
key := strings.SplitN(extraOption, "=", 2)[0]
exists := false
for _, opt := range options {
if strings.HasPrefix(opt, key) {
exists = true
break
}
}
if !exists {
extraOptions = append(extraOptions, extraOption)
}
}
options = append(options, extraOptions...)
mavenOptions = strings.Join(options, " ")
for i, e := range env {
if strings.HasPrefix(e, "MAVEN_OPTS=") {
env[i] = "MAVEN_OPTS=" + mavenOptions
break
}
}
}
cmd.Env = env
}
Log.WithValues("MAVEN_OPTS", mavenOptions).Infof("executing: %s", strings.Join(cmd.Args, " "))
return util.RunAndLog(ctx, cmd, mavenLogHandler, mavenLogHandler)
}