github.com/jenkins-x/jx/v2@v2.1.155/pkg/maven/cli.go (about) 1 package maven 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 "strings" 9 10 filemutex "github.com/alexflint/go-filemutex" 11 "github.com/jenkins-x/jx-logging/pkg/log" 12 "github.com/jenkins-x/jx/v2/pkg/packages" 13 "github.com/jenkins-x/jx/v2/pkg/util" 14 ) 15 16 // InstallMavenIfRequired installs maven if not available 17 func InstallMavenIfRequired() error { 18 homeDir, err := util.ConfigDir() 19 if err != nil { 20 return err 21 } 22 m, err := filemutex.New(homeDir + "/jx.lock") 23 if err != nil { 24 panic(err) 25 } 26 err = m.Lock() 27 if err != nil { 28 return err 29 } 30 31 cmd := util.Command{ 32 Name: "mvn", 33 Args: []string{"-v"}, 34 } 35 _, err = cmd.RunWithoutRetry() 36 if err == nil { 37 err = m.Unlock() 38 if err != nil { 39 return err 40 } 41 return nil 42 } 43 // lets assume maven is not installed so lets download it 44 clientURL := fmt.Sprintf("https://repo1.maven.org/maven2/org/apache/maven/apache-maven/%s/apache-maven-%s-bin.zip", MavenVersion, MavenVersion) 45 46 log.Logger().Infof("Apache Maven is not installed so lets download: %s", util.ColorInfo(clientURL)) 47 48 mvnDir := filepath.Join(homeDir, "maven") 49 mvnTmpDir := filepath.Join(homeDir, "maven-tmp") 50 zipFile := filepath.Join(homeDir, "mvn.zip") 51 52 err = os.MkdirAll(mvnDir, util.DefaultWritePermissions) 53 if err != nil { 54 err = m.Unlock() 55 if err != nil { 56 return err 57 } 58 return err 59 } 60 61 log.Logger().Info("\ndownloadFile") 62 err = packages.DownloadFile(clientURL, zipFile) 63 if err != nil { 64 err = m.Unlock() 65 if err != nil { 66 return err 67 } 68 return err 69 } 70 71 log.Logger().Info("\nutil.Unzip") 72 err = util.Unzip(zipFile, mvnTmpDir) 73 if err != nil { 74 err = m.Unlock() 75 if err != nil { 76 return err 77 } 78 return err 79 } 80 81 // lets find a directory inside the unzipped folder 82 log.Logger().Info("\nReadDir") 83 files, err := ioutil.ReadDir(mvnTmpDir) 84 if err != nil { 85 err = m.Unlock() 86 if err != nil { 87 return err 88 } 89 return err 90 } 91 for _, f := range files { 92 name := f.Name() 93 if f.IsDir() && strings.HasPrefix(name, "apache-maven") { 94 err = os.RemoveAll(mvnDir) 95 if err != nil { 96 return err 97 } 98 99 err = os.Rename(filepath.Join(mvnTmpDir, name), mvnDir) 100 if err != nil { 101 err = m.Unlock() 102 if err != nil { 103 return err 104 } 105 return err 106 } 107 log.Logger().Infof("Apache Maven is installed at: %s", util.ColorInfo(mvnDir)) 108 err = m.Unlock() 109 if err != nil { 110 return err 111 } 112 err = os.Remove(zipFile) 113 if err != nil { 114 err = m.Unlock() 115 if err != nil { 116 return err 117 } 118 return err 119 } 120 err = os.RemoveAll(mvnTmpDir) 121 if err != nil { 122 err = m.Unlock() 123 if err != nil { 124 return err 125 } 126 return err 127 } 128 err = m.Unlock() 129 if err != nil { 130 return err 131 } 132 return nil 133 } 134 } 135 err = m.Unlock() 136 if err != nil { 137 return err 138 } 139 return fmt.Errorf("Could not find an apache-maven folder inside the unzipped maven distro at %s", mvnTmpDir) 140 }