Class: LicenseAuto::Maven

Inherits:
PackageManager show all
Defined in:
lib/license_auto/package_manager/maven.rb

Constant Summary collapse

LANGUAGE =
'Java'
DEPENDENCY_PATTERN =
/^\[INFO\]\s+(?<group>.+):(?<name>.+):(?<type>.+):(?<version>.+):(?<scope>(compile|provided|runtime|test|system|import))$/

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from PackageManager

#check_cli, #dependency_file_path_names

Constructor Details

#initialize(path) ⇒ Maven

Returns a new instance of Maven.



16
17
18
# File 'lib/license_auto/package_manager/maven.rb', line 16

def initialize(path)
  super(path)
end

Class Method Details

.check_cliObject



122
123
124
125
126
127
128
129
130
131
# File 'lib/license_auto/package_manager/maven.rb', line 122

def self.check_cli
  cmd = 'mvn -v'
  stdout_str, stderr_str, _status = Open3.capture3(cmd)
  if stdout_str.include?('Apache Maven 3')
    true
  else
    LicenseAuto.logger.error("stdout_str: #{stdout_str}, stderr_str: #{stderr_str}")
    false
  end
end

Instance Method Details

#collect_dependenciesObject

> Array: [:version=>“4.8”, :remote=>nil]

Returns:

  • example



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/license_auto/package_manager/maven.rb', line 44

def collect_dependencies
  deps =
      if resolve_dependencies
        list_dependencies.map {|dep|
          group, name, type, version, scope = dep.split(':')
          {
              name: [group, name].join(':'),
              version: version,
              remote: nil
          }
        }
      else
        []
      end
  LicenseAuto.logger.debug(deps)
  deps
end

#dependency_file_patternObject



20
21
22
# File 'lib/license_auto/package_manager/maven.rb', line 20

def dependency_file_pattern
  /#{@path}\/pom\.xml$/i
end

#list_dependenciesObject

Command output sample:

INFO
INFO

INFO

Building GitHub Maven Plugin Example 0.1-SNAPSHOT

INFO

INFO
INFO

— maven-dependency-plugin:2.8:list (default-cli) @ github-maven-example —

INFO
INFO

The following files have been resolved:

INFO

junit:junit:jar:4.8:test

INFO
INFO

INFO

BUILD SUCCESS

INFO

INFO

Total time: 1.819 s

INFO

Finished at: 2016-04-18T15:26:58+08:00

INFO

Final Memory: 14M/155M

INFO

Returns:



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/license_auto/package_manager/maven.rb', line 98

def list_dependencies
  if resolve_dependencies
    deps = Set.new
    Dir.chdir(@path) do
      cmd = 'mvn dependency:list'
      out, err, _st = Open3.capture3(cmd)
      # LicenseAuto.logger.debug("#{out}")
      if out.include?("The following files have been resolved:")
        out.split("\n").each {|line|
          matched = DEPENDENCY_PATTERN.match(line)
          # LicenseAuto.logger.debug("#{line}, matched: #{matched}")
          if matched
            group_name_version = line.gsub!(/\[INFO\]/,'').strip!
            deps.add(group_name_version)
          end
        }
      else
        LicenseAuto.logger.error("#{err}")
      end
    end
    deps
  end
end

#parse_dependenciesObject



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/license_auto/package_manager/maven.rb', line 24

def parse_dependencies
  build_files = dependency_file_path_names
  if build_files.empty?
    LicenseAuto.logger.info("#{LANGUAGE}: #{dependency_file_pattern} file not exist")
    []
  else
    build_files.map {|dep_file|
      LicenseAuto.logger.debug(dep_file)

      {
          dep_file: dep_file,
          deps: collect_dependencies
      }
    }
  end
  # LicenseAuto.logger.debug(JSON.pretty_generate(deps))
end

#resolve_dependenciesObject



62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/license_auto/package_manager/maven.rb', line 62

def resolve_dependencies
  bool = false
  Dir.chdir(@path) do
    cmd = 'mvn dependency:resolve'
    stdout_str, stderr_str, _status = Open3.capture3(cmd)
    if stdout_str.length > 0
      # LicenseAuto.logger.debug("stdout_str: #{stdout_str}")
      if stdout_str.include?("[INFO] BUILD SUCCESS")
        bool = true
      end
    end
  end
  bool
end