1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# frozen_string_literal: true
module LicenseFinder
class Maven
XML_PARSE_OPTIONS = {
'ForceArray' => %w[license dependency],
'GroupTags' => {
'licenses' => 'license',
'dependencies' => 'dependency'
}
}.freeze
def prepare
within_project_path do
tool_box.install(tool: :java, version: java_version, env: default_env)
end
end
def current_packages
within_project_path do
return [] unless shell.execute(detect_licenses_command, env: default_env)[-1].success?
resource_files.flat_map { |file| map_from(file.read) }.uniq
end
end
private
def java_version(env: ENV)
@java_version ||= tool_box.version_of(:java, env: env)
end
def default_env
@default_env = {
'CACHE_DIR' => '/opt/gitlab',
'JAVA_HOME' => ENV.fetch("JAVA_HOME", "/opt/asdf/installs/java/#{java_version}")
}
end
def detect_licenses_command
mvn_wrapper = project_path.join('mvnw')
[
mvn_wrapper.exist? ? mvn_wrapper : :mvn,
"-e",
"org.codehaus.mojo:license-maven-plugin:aggregate-download-licenses",
"-Dlicense.excludedScopes=#{@ignored_groups.to_a.join(',')}",
"-Dorg.slf4j.simpleLogger.log.org.codehaus.mojo.license=debug",
ENV.fetch('MAVEN_CLI_OPTS', '-DskipTests')
]
end
def resource_files
Pathname.glob(project_path.join('**', 'target', 'generated-resources', 'licenses.xml'))
end
def map_from(xml)
log.debug(xml)
XmlSimple
.xml_in(xml, XML_PARSE_OPTIONS)['dependencies']
.map { |dependency| Dependency.from(MavenPackage.new(dependency), detected_package_path) }
end
end
end
|