diff --git a/external-providers/java-external-provider/Dockerfile b/external-providers/java-external-provider/Dockerfile index 3f8f0407..9efb2ea0 100644 --- a/external-providers/java-external-provider/Dockerfile +++ b/external-providers/java-external-provider/Dockerfile @@ -20,6 +20,7 @@ FROM quay.io/konveyor/jdtls-server-base COPY --from=builder /java-provider/java-external-provider /usr/local/bin/java-external-provider +ENV HOME /addon EXPOSE 14651 WORKDIR /addon ENTRYPOINT ["java-external-provider", "--port", "14651"] diff --git a/external-providers/java-external-provider/pkg/java_external_provider/provider.go b/external-providers/java-external-provider/pkg/java_external_provider/provider.go index 278b3d41..4a93eb1e 100644 --- a/external-providers/java-external-provider/pkg/java_external_provider/provider.go +++ b/external-providers/java-external-provider/pkg/java_external_provider/provider.go @@ -12,6 +12,7 @@ import ( "path" "path/filepath" "regexp" + "runtime" "strings" "sync" @@ -905,22 +906,39 @@ func (p *javaProvider) BuildSettingsFile(m2CacheDir string) (settingsFile string %v ` - var settingsFilePath string - m2Home := os.Getenv("M2_HOME") - if m2Home != "" { - settingsFilePath = filepath.Join(m2Home, "conf", "globalSettings.xml") - f, err := os.Create(settingsFilePath) - if err != nil { - return "", err - } - defer func() { - _ = f.Close() - }() - _, err = f.Write([]byte(fmt.Sprintf(fileContentTemplate, m2CacheDir))) + var homeDir string + set := true + ops := runtime.GOOS + if ops == "linux" { + homeDir, set = os.LookupEnv("XDG_CONFIG_HOME") + } + if ops != "linux" || homeDir == "" || !set { + // on Unix, including macOS, this returns the $HOME environment variable. On Windows, it returns %USERPROFILE% + homeDir, err = os.UserHomeDir() if err != nil { return "", err } } + settingsFilePath := filepath.Join(homeDir, ".analyze", "globalSettings.xml") + err = os.Mkdir(filepath.Join(homeDir, ".analyze"), 0777) + if err != nil && !errors.Is(err, os.ErrExist) { + return "", err + } + f, err := os.Create(settingsFilePath) + if err != nil { + return "", err + } + defer func() { + _ = f.Close() + }() + err = os.Chmod(settingsFilePath, 0777) + if err != nil { + return "", err + } + _, err = f.Write([]byte(fmt.Sprintf(fileContentTemplate, m2CacheDir))) + if err != nil { + return "", err + } return settingsFilePath, nil }