diff --git a/analyzer/java/download.go b/analyzer/java/download.go index d7498bf8e7d0a84d6e9ab9c19af1727b6e7fc122..962a6c077489f70d68bad7e00a611fc78b60d1dd 100644 --- a/analyzer/java/download.go +++ b/analyzer/java/download.go @@ -231,7 +231,9 @@ func (m Mvn) getPomWithPath(relativePath string) (*Pom, bool) { } // GetPom is get pom from pomMap if exist else download pom -func (m Mvn) GetPom(p PomDependency) (pom *Pom) { +func (m Mvn) GetPom(p PomDependency, repos []string) (pom *Pom) { + del := m.AddRepos(repos) + defer del() if p, ok := m.getPomWithPath(p.RelativePath); ok { return p } diff --git a/analyzer/java/mvn.go b/analyzer/java/mvn.go index f175544fb00b6a93a637afa90ba888f6dac067dc..b0f40ef3bc3b604d25f7b215243d6d1369ee7673 100644 --- a/analyzer/java/mvn.go +++ b/analyzer/java/mvn.go @@ -28,12 +28,31 @@ func NewMvn() Mvn { } } +// AddRepos 添加仓库 +// return: 删除添加的仓库,需要在不会用到仓库时删掉 +func (m Mvn) AddRepos(repos []string) func() { + add_repos := []string{} + for _, repo := range repos { + if _, ok := m.repos[repo]; !ok { + add_repos = append(add_repos, repo) + m.repos[repo] = args.RepoConfig{ + Repo: repo, + } + } + } + return func() { + for _, repo := range add_repos { + delete(m.repos, repo) + } + } +} + // parseProperties 获取 Properties func (m Mvn) parseProperties(p *Pom) PomEnv { env := PomEnv{} for p != nil { env = unionEnv(env, PomEnv{Properties: p.Properties}) - p = m.GetPom(p.Parent) + p = m.GetPom(p.Parent, p.Repositories) } return env } @@ -57,7 +76,7 @@ func checkExclusion(pd PomDependency, exc PomExclusions) bool { func (m Mvn) importPom(n *Pom, sp PomDependency, other func(n, s *Pom)) { n.Update(n.Properties, &sp) - s := m.GetPom(sp) + s := m.GetPom(sp, n.Repositories) if s != nil { s.PomDependency = sp s.define = n @@ -232,7 +251,7 @@ func (m Mvn) ParsePom(p *Pom, deep bool) { for _, d := range n.Dependencies { depSet[d.Index2()] = true } - p := m.GetPom(n.Parent) + p := m.GetPom(n.Parent, n.Repositories) for p != nil { for _, d := range p.Dependencies { if !depSet[d.Index2()] { @@ -241,7 +260,7 @@ func (m Mvn) ParsePom(p *Pom, deep bool) { n.Dependencies = append(n.Dependencies, d) } } - p = m.GetPom(p.Parent) + p = m.GetPom(p.Parent, p.Repositories) } } // 根据maven规则校准当前dependencies diff --git a/analyzer/java/pom.go b/analyzer/java/pom.go index 78e4798c0492f937212d22a829f6ad0a54178944..a90494d37e81d6088b0e7b5eb6245911accb9fce 100644 --- a/analyzer/java/pom.go +++ b/analyzer/java/pom.go @@ -7,7 +7,6 @@ import ( "path" "regexp" "strings" - "util/args" "util/model" ) @@ -301,14 +300,6 @@ func (m Mvn) ReadPomFile(f *model.FileInfo, data []byte) (p *Pom) { p.Dependencies[i].Version = strings.Trim(p.Dependencies[i].Version, "[]") } } - // mvn添加repos - for _, repo := range p.Repositories { - if _, ok := m.repos[repo]; !ok { - m.repos[repo] = args.RepoConfig{ - Repo: repo, - } - } - } return }