Class: LicenseAuto::Gradle
- Inherits:
-
PackageManager
- Object
- PackageManager
- LicenseAuto::Gradle
- Defined in:
- lib/license_auto/package_manager/gradle.rb
Constant Summary collapse
- LANGUAGE =
'Java'- DEPENDENCY_PATTERN =
/\\---\s(?<group>.+):(?<name>.+):(?<version>.+)/- REMOTE =
'https://repo1.maven.org/maven2/'
Class Method Summary collapse
Instance Method Summary collapse
- #collect_dependencies ⇒ Object
- #dependency_file_pattern ⇒ Object
- #filter_version(version_range) ⇒ Object
-
#initialize(path) ⇒ Gradle
constructor
A new instance of Gradle.
-
#list_dependencies(project_name = nil) ⇒ Object
Sample: Set.new([“commons-beanutils:commons-beanutils:1.8.3”, “commons-logging:commons-logging:1.1.1”, “junit:junit:4.8.2”]).
-
#list_projects ⇒ Object
Out put sample: ———————————————————— Root project ————————————————————.
- #parse_dependencies ⇒ Object
Methods inherited from PackageManager
#check_cli, #dependency_file_path_names
Constructor Details
#initialize(path) ⇒ Gradle
Returns a new instance of Gradle.
14 15 16 |
# File 'lib/license_auto/package_manager/gradle.rb', line 14 def initialize(path) super(path) end |
Class Method Details
.check_cli ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/license_auto/package_manager/gradle.rb', line 41 def self.check_cli cmd = 'gradle --version' stdout_str, stderr_str, _status = Open3.capture3(cmd) if stdout_str.include?('Gradle 2.8') true else LicenseAuto.logger.error("stdout_str: #{stdout_str}, stderr_str: #{stderr_str}") false end end |
Instance Method Details
#collect_dependencies ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/license_auto/package_manager/gradle.rb', line 81 def collect_dependencies root_deps = list_dependencies projects = list_projects projects.each {|project_name| deps = list_dependencies(project_name) root_deps.merge(deps) } root_deps.map {|dep| group, name, version_range = dep.split(':') version = filter_version(version_range) { name: [group, name].join(':'), version: version, remote: REMOTE } } end |
#dependency_file_pattern ⇒ Object
18 19 20 |
# File 'lib/license_auto/package_manager/gradle.rb', line 18 def dependency_file_pattern /#{@path}\/build.gradle$/i end |
#filter_version(version_range) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/license_auto/package_manager/gradle.rb', line 99 def filter_version(version_range) # 'junit:junit:3.8.2 -> 4.11' range_arrow_pattern = /(?<min_ver>.*)\s->\s(?<max_ver>.*)/ matched = range_arrow_pattern.match(version_range) if matched version_range = matched[:max_ver] end # 'org.apache.ant:ant:1.8.3 (*)' star_pattern = /\s\(\*\)/ version_range.gsub(star_pattern, '') end |
#list_dependencies(project_name = nil) ⇒ Object
Returns sample: Set.new([“commons-beanutils:commons-beanutils:1.8.3”, “commons-logging:commons-logging:1.1.1”, “junit:junit:4.8.2”]).
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/license_auto/package_manager/gradle.rb', line 114 def list_dependencies(project_name=nil) Dir.chdir(@path) do deps = Set.new cmd = if project_name "gradle -q #{project_name}:dependencies" else "gradle -q dependencies" end LicenseAuto.logger.debug("cmd: #{cmd}") stdout_str, stderr_str, _status = Open3.capture3(cmd) if stdout_str.length > 0 LicenseAuto.logger.debug("stdout_str: #{stdout_str}") stdout_str.split("\n").each {|line| matched = DEPENDENCY_PATTERN.match(line) # LicenseAuto.logger.debug("#{line}, matched: #{matched}") if matched group_name_version = matched.to_s.gsub(/\\---\s/, '') # External dependencies # DOC: https://docs.gradle.org/current/userguide/artifact_dependencies_tutorial.html#N105E1 deps.add(group_name_version) end } else LicenseAuto.logger.error("stderr_str: #{stderr_str}") end LicenseAuto.logger.debug(deps) deps end end |
#list_projects ⇒ Object
Out put sample:
Root project
Root project ‘maven-gradle-comparison-dependency-simplest’ No sub-projects
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/license_auto/package_manager/gradle.rb', line 59 def list_projects cmd = "gradle -q project" LicenseAuto.logger.debug(@path) projects = [] Dir.chdir(@path) do stdout_str, stderr_str, _status = Open3.capture3(cmd) if stdout_str.length > 0 LicenseAuto.logger.debug(stdout_str) stdout_str.split("\n").each {|line| sub_project_pattern = /Project\s\'(:)?(?<project_name>.+)\'/ matched = sub_project_pattern.match(line) if matched projects.push(match_result[:project_name]) end } else LicenseAuto.logger.error(stderr_str) end projects end end |
#parse_dependencies ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/license_auto/package_manager/gradle.rb', line 22 def parse_dependencies build_files = dependency_file_path_names if build_files.empty? LicenseAuto.logger.info("#{LANGUAGE}: #{dependency_file_pattern} file not exist") [] # TODO: check his sub dir has `build.gradle` or not 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(dep_files)) end |