class LicenseAuto::Gradle
Constants
- DEPENDENCY_PATTERN
- LANGUAGE
- REMOTE
Public Class Methods
check_cli()
click to toggle source
# 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
new(path)
click to toggle source
Calls superclass method
LicenseAuto::PackageManager::new
# File lib/license_auto/package_manager/gradle.rb, line 14 def initialize(path) super(path) end
Public Instance Methods
collect_dependencies()
click to toggle source
# 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()
click to toggle source
# File lib/license_auto/package_manager/gradle.rb, line 18 def dependency_file_pattern /#{@path}\/build.gradle$/i end
filter_version(version_range)
click to toggle source
# 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)
click to toggle source
@return sample:
Set.new(["commons-beanutils:commons-beanutils:1.8.3", "commons-logging:commons-logging:1.1.1", "junit:junit:4.8.2"])
# 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()
click to toggle source
Out put sample:
Root project
Root project 'maven-gradle-comparison-dependency-simplest' No sub-projects
# 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()
click to toggle source
# 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