[7x backport] Add optional sourceURL to license report CSV (#12362)

Clean backport of #12346

This commit adds an extra optional column 'sourceURL' to the license report. This
column contains a pointer to the source code, which is optional for most dependencies,
but a requirement for some, such as the Red Hat Universal Base Image.

This commit also populates the 'copyright' field, which previously was an used
column in the CSV definition

Relates #12297
This commit is contained in:
Rob Bavey 2020-10-20 11:00:05 -04:00 committed by GitHub
parent a693fa3bf4
commit bf1238dec2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 120 additions and 67 deletions

View file

@ -31,7 +31,7 @@ class LogStash::DependencyReport < Clamp::Command
OTHER_DEPENDENCIES = [
["jruby", "", "http://jruby.org", "EPL-2.0"],
["Red Hat Universal Base Image minimal","8","https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8","Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf"]
["Red Hat Universal Base Image minimal","8","https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8","Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf","","https://oss-dependencies.elastic.co/redhat/ubi/ubi-minimal-8-source.tar.gz"]
]
def execute
@ -40,7 +40,7 @@ class LogStash::DependencyReport < Clamp::Command
tmp_dir = java.lang.System.getProperty("java.io.tmpdir")
ruby_output_path = File.join(tmp_dir, SecureRandom.uuid)
# Write a CSV with just the ruby stuff
CSV.open(ruby_output_path, "wb", :headers => [ "name", "version", "url", "license" ], :write_headers => true) do |csv|
CSV.open(ruby_output_path, "wb", :headers => [ "name", "version", "url", "license","copyright","sourceURL" ], :write_headers => true) do |csv|
puts "Finding gem dependencies"
gems.each { |d| csv << d }
puts "Finding gem embedded java/jar dependencies"

View file

@ -23,15 +23,11 @@ package org.logstash.dependencies;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Objects;
import java.util.Scanner;
import java.util.SortedSet;
@ -42,13 +38,15 @@ class Dependency implements Comparable<Dependency> {
String version;
String url;
String spdxLicense;
String sourceURL;
String copyright;
/**
* Returns an object array representing this dependency as a CSV record according
* to the format requested here: https://github.com/elastic/logstash/issues/8725
*/
Object[] toCsvReportRecord() {
return new String[] {name, version, "", url, spdxLicense, ""};
return new String[] {name, version, "", url, spdxLicense, copyright, sourceURL};
}
/**
@ -78,10 +76,15 @@ class Dependency implements Comparable<Dependency> {
private static Dependency fromRubyCsvRecord(CSVRecord record) {
Dependency d = new Dependency();
// name, version, url, license
// name, version, url, license, copyright, sourceURL
d.name = record.get(0);
d.version = record.get(1);
if (record.size() > 4) {
d.copyright = record.get(4);
}
if (record.size() > 5) {
d.sourceURL = record.get(5);
}
return d;
}
@ -179,6 +182,10 @@ class Dependency implements Comparable<Dependency> {
return version;
}
public String getSourceURL() {
return sourceURL;
}
@Override
public String toString() {
return "<Dependency " + name + " v" + version + ">";

View file

@ -49,7 +49,7 @@ public class ReportGenerator {
final String UNKNOWN_LICENSE = "UNKNOWN";
final Collection<Dependency> UNKNOWN_LICENSES = new ArrayList<>();
final String[] CSV_HEADERS = {"name", "version", "revision", "url", "license", "copyright"};
final String[] CSV_HEADERS = {"name", "version", "revision", "url", "license", "copyright","sourceURL"};
final Collection<Dependency> MISSING_NOTICE = new ArrayList<>();
boolean generateReport(
@ -65,7 +65,7 @@ public class ReportGenerator {
Dependency.addDependenciesFromRubyReport(rubyDependenciesStream, dependencies);
addJavaDependencies(javaDependenciesStreams, dependencies);
Map<String, LicenseUrlPair> licenseMapping = new HashMap<>();
Map<String, LicenseInfo> licenseMapping = new HashMap<>();
checkDependencyLicenses(licenseMappingStream, acceptableLicensesStream, licenseMapping, dependencies);
checkDependencyNotices(noticeOutput, dependencies);
@ -91,7 +91,7 @@ public class ReportGenerator {
}
private void checkDependencyLicenses(InputStream licenseMappingStream, InputStream acceptableLicensesStream,
Map<String, LicenseUrlPair> licenseMapping, SortedSet<Dependency> dependencies) throws IOException {
Map<String, LicenseInfo> licenseMapping, SortedSet<Dependency> dependencies) throws IOException {
readLicenseMapping(licenseMappingStream, licenseMapping);
List<String> acceptableLicenses = new ArrayList<>();
readAcceptableLicenses(acceptableLicensesStream, acceptableLicenses);
@ -134,10 +134,10 @@ public class ReportGenerator {
}
}
private void reportUnusedLicenseMappings(Writer unusedLicenseWriter, Map<String, LicenseUrlPair> licenseMapping) throws IOException {
private void reportUnusedLicenseMappings(Writer unusedLicenseWriter, Map<String, LicenseInfo> licenseMapping) throws IOException {
SortedSet<String> unusedDependencies = new TreeSet<>();
for (Map.Entry<String, LicenseUrlPair> entry : licenseMapping.entrySet()) {
for (Map.Entry<String, LicenseInfo> entry : licenseMapping.entrySet()) {
if (entry.getValue().isUnused) {
unusedDependencies.add(entry.getKey());
}
@ -177,13 +177,13 @@ public class ReportGenerator {
}
}
private void checkDependencyLicense(Map<String, LicenseUrlPair> licenseMapping, List<String> acceptableLicenses, Dependency dependency) {
private void checkDependencyLicense(Map<String, LicenseInfo> licenseMapping, List<String> acceptableLicenses, Dependency dependency) {
if (licenseMapping.containsKey(dependency.name)) {
LicenseUrlPair pair = licenseMapping.get(dependency.name);
LicenseInfo licenseInfo = licenseMapping.get(dependency.name);
String[] dependencyLicenses = pair.license.split("\\|");
String[] dependencyLicenses = licenseInfo.license.split("\\|");
boolean hasAcceptableLicense = false;
if (pair.url != null && !pair.url.equals("")) {
if (licenseInfo.url != null && !licenseInfo.url.equals("")) {
for (int k = 0; k < dependencyLicenses.length && !hasAcceptableLicense; k++) {
if (acceptableLicenses.stream().anyMatch(dependencyLicenses[k]::equalsIgnoreCase)) {
hasAcceptableLicense = true;
@ -192,9 +192,11 @@ public class ReportGenerator {
}
if (hasAcceptableLicense) {
dependency.spdxLicense = pair.license;
dependency.url = pair.url;
pair.isUnused = false;
dependency.spdxLicense = licenseInfo.license;
dependency.url = licenseInfo.url;
dependency.sourceURL = licenseInfo.sourceURL;
dependency.copyright = licenseInfo.copyright;
licenseInfo.isUnused = false;
} else {
// unacceptable license or missing URL
UNKNOWN_LICENSES.add(dependency);
@ -216,7 +218,7 @@ public class ReportGenerator {
}
}
private void readLicenseMapping(InputStream stream, Map<String, LicenseUrlPair> licenseMapping)
private void readLicenseMapping(InputStream stream, Map<String, LicenseInfo> licenseMapping)
throws IOException {
Reader in = new InputStreamReader(stream);
for (CSVRecord record : CSVFormat.DEFAULT.withFirstRecordAsHeader().parse(in)) {
@ -226,14 +228,15 @@ public class ReportGenerator {
String depName = lastIndex < 0
? dependencyNameAndVersion
: dependencyNameAndVersion.substring(0, lastIndex);
validateAndAdd(licenseMapping, depName, new LicenseUrlPair(record.get(2), record.get(1)));
validateAndAdd(licenseMapping, depName, LicenseInfo.fromCSVRecord(record));
}
}
}
private static void validateAndAdd(Map<String, LicenseUrlPair> licenses, String depName, LicenseUrlPair lup) {
private static void validateAndAdd(Map<String, LicenseInfo> licenses, String depName, LicenseInfo lup) {
if (licenses.containsKey(depName)) {
LicenseUrlPair existingLicense = licenses.get(depName);
LicenseInfo existingLicense = licenses.get(depName);
// Because dependency versions are not treated independently, if dependencies with different versions
// have different licenses, we cannot distinguish between them
@ -249,13 +252,26 @@ public class ReportGenerator {
}
class LicenseUrlPair {
class LicenseInfo {
String license;
String url;
String sourceURL;
String copyright;
boolean isUnused = true;
LicenseUrlPair(String license, String url) {
LicenseInfo(String license, String url) {
this.license = license;
this.url = url;
}
static LicenseInfo fromCSVRecord(CSVRecord record){
LicenseInfo info = new LicenseInfo(record.get(2), record.get(1));
if (record.size() > 3){
info.copyright = record.get(3);
}
if (record.size() > 4){
info.sourceURL = record.get(4);
}
return info;
}
}

View file

@ -1,4 +1,4 @@
dependency,dependencyUrl,licenseOverride
dependency,dependencyUrl,licenseOverride,copyright,sourceURL
"addressable:",https://github.com/sporkmonger/addressable,Apache-2.0
"atomic:",http://github.com/ruby-concurrency/atomic,Apache-2.0
"avl_tree:",https://github.com/nahi/avl_tree,BSD-2-Clause-FreeBSD
@ -121,7 +121,7 @@ dependency,dependencyUrl,licenseOverride
"rack-protection:",http://github.com/rkh/rack-protection,MIT
"rack:",http://rack.github.io/,MIT
"rake:",https://github.com/ruby/rake,MIT
"Red Hat Universal Base Image minimal:",https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8,Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf
"Red Hat Universal Base Image minimal:",https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8,Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf,,https://oss-dependencies.elastic.co/redhat/ubi/ubi-minimal-8-source.tar.gz
"redis:",https://github.com/redis/redis-rb,MIT
"ruby-progressbar:",https://github.com/jfelchner/ruby-progressbar,MIT
"rubyzip:",https://github.com/rubyzip/rubyzip,BSD-2-Clause-FreeBSD

Can't render this file because it has a wrong number of fields in line 2.

View file

@ -77,8 +77,8 @@ public class ReportGeneratorTest {
// verify that the two components in the test input with missing licenses are
// listed in the output with no license, i.e., an empty license field followed by CR/LF
assertTrue(csvOutput.toString().contains("commons-io:commons-io,2.5,,,,\r\n"));
assertTrue(csvOutput.toString().contains("filesize,0.0.4,,,,\r\n"));
assertTrue(csvOutput.toString().contains("commons-io:commons-io,2.5,,,,,\r\n"));
assertTrue(csvOutput.toString().contains("filesize,0.0.4,,,,,\r\n"));
String unusedLicenses = unusedLicenseWriter.toString();
assertThat(unusedLicenses, containsString("43 license mappings were specified but unused"));
}
@ -103,7 +103,7 @@ public class ReportGeneratorTest {
// verify that the two components in the test input with unacceptable licenses are
// listed in the output with no license, i.e., an empty license field followed by CR/LF
String csvString = csvOutput.toString();
assertThat(csvString, containsString("com.fasterxml.jackson.core:jackson-core,2.7.3,,,,\r\n"));
assertThat(csvString, containsString("com.fasterxml.jackson.core:jackson-core,2.7.3,,,,,\r\n"));
Pattern bundlerPattern = Pattern.compile(".*bundler,1\\.16\\.[0-1],,,,.*");
assertThat(bundlerPattern.matcher(csvString).find(), is(true));
@ -119,8 +119,8 @@ public class ReportGeneratorTest {
// verify that the two components in the test input with missing URLs are
// listed in the output with no license, i.e., an empty license field followed by CR/LF
assertTrue(csvOutput.toString().contains("org.codehaus.janino:commons-compiler,3.0.8,,,,\r\n"));
assertTrue(csvOutput.toString().contains("json-parser,,,,,\r\n"));
assertTrue(csvOutput.toString().contains("org.codehaus.janino:commons-compiler,3.0.8,,,,,\r\n"));
assertTrue(csvOutput.toString().contains("json-parser,,,,,,\r\n"));
String unusedLicenses = unusedLicenseWriter.toString();
assertThat(unusedLicenses, containsString("43 license mappings were specified but unused"));
}

View file

@ -1,4 +1,9 @@
==========
Notice for: Red Hat Universal Base Image minimal-8
----------
TEST
==========
Notice for: bundler-1.16.1
----------
@ -81,3 +86,9 @@ Notice for: org.codehaus.janino:commons-compiler-3.0.8
----------
TEST
==========
Notice for: tzinfo-
----------
TEST

View file

@ -1,15 +1,17 @@
name,version,revision,url,license,copyright
bundler,1.16.1,,https://rubygems.org/gems/bundler/versions/1.16.0,UnacceptableLicense|MIT,
com.fasterxml.jackson.core:jackson-core,2.7.3,,https://github.com/FasterXML/jackson-core/tree/jackson-core-2.7.3,Apache-2.0,
com.google.errorprone:javac-shaded,9-dev-r4023-3,,http://repo1.maven.org/maven2/com/google/errorprone/javac-shaded/9-dev-r4023-3/,EPL-1.0,
commons-io:commons-io,2.5,,https://commons.apache.org/proper/commons-io/index.html,Apache-2.0,
control.js,,,https://github.com/zombieleet/control,MIT,
filesize,0.0.4,,https://rubygems.org/gems/filesize/versions/0.0.4,MIT,
gradle.plugin.com.github.jk1:gradle-license-report,0.7.1,,https://github.com/jk1/Gradle-License-Report,Apache-2.0,
jar-dependencies,0.3.12,,https://rubygems.org/gems/jar-dependencies/versions/0.3.11,MIT,
jruby-openssl,0.9.21,,https://rubygems.org/gems/jruby-openssl/versions/0.9.20-java,Apache-2.0,
jruby-readline,1.1.1,,https://rubygems.org/gems/jruby-readline/versions/1.1.1-java,Apache-2.0,
json-generator,,,https://github.com/flori/json,Ruby,
json-parser,,,https://rubygems.org/gems/json-parser/versions/0.0.1,Apache-2.0,
junit:junit,4.12,,https://github.com/junit-team/junit4,Apache-2.0,
org.codehaus.janino:commons-compiler,3.0.8,,https://github.com/janino-compiler/janino,BSD-3-Clause-Attribution,
name,version,revision,url,license,copyright,sourceURL
Red Hat Universal Base Image minimal,8,,https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8,Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf,,https://oss-dependencies.elastic.co/redhat/ubi/ubi-minimal-8-source.tar.gz
bundler,1.16.1,,https://rubygems.org/gems/bundler/versions/1.16.0,UnacceptableLicense|MIT,,
com.fasterxml.jackson.core:jackson-core,2.7.3,,https://github.com/FasterXML/jackson-core/tree/jackson-core-2.7.3,Apache-2.0,,
com.google.errorprone:javac-shaded,9-dev-r4023-3,,http://repo1.maven.org/maven2/com/google/errorprone/javac-shaded/9-dev-r4023-3/,EPL-1.0,,
commons-io:commons-io,2.5,,https://commons.apache.org/proper/commons-io/index.html,Apache-2.0,,
control.js,,,https://github.com/zombieleet/control,MIT,,
filesize,0.0.4,,https://rubygems.org/gems/filesize/versions/0.0.4,MIT,,
gradle.plugin.com.github.jk1:gradle-license-report,0.7.1,,https://github.com/jk1/Gradle-License-Report,Apache-2.0,,
jar-dependencies,0.3.12,,https://rubygems.org/gems/jar-dependencies/versions/0.3.11,MIT,,
jruby-openssl,0.9.21,,https://rubygems.org/gems/jruby-openssl/versions/0.9.20-java,Apache-2.0,,
jruby-readline,1.1.1,,https://rubygems.org/gems/jruby-readline/versions/1.1.1-java,Apache-2.0,,
json-generator,,,https://github.com/flori/json,Ruby,,
json-parser,,,https://rubygems.org/gems/json-parser/versions/0.0.1,Apache-2.0,,
junit:junit,4.12,,https://github.com/junit-team/junit4,Apache-2.0,,
org.codehaus.janino:commons-compiler,3.0.8,,https://github.com/janino-compiler/janino,BSD-3-Clause-Attribution,,
tzinfo,,,https://github.com/tzinfo/tzinfo,MIT,Philip Ross,

View file

@ -60,3 +60,5 @@ dependency,dependencyUrl,licenseOverride
"json-parser:",https://rubygems.org/gems/json-parser/versions/0.0.1,Apache-2.0
"junit:junit:4.12",https://github.com/junit-team/junit4,Apache-2.0
"json-generator",https://github.com/flori/json,Ruby
"tzinfo:",https://github.com/tzinfo/tzinfo,MIT,Philip Ross
"Red Hat Universal Base Image minimal:8",https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8,Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf,,https://oss-dependencies.elastic.co/redhat/ubi/ubi-minimal-8-source.tar.gz

Can't render this file because it has a wrong number of fields in line 63.

View file

@ -1,4 +1,4 @@
dependency,dependencyUrl,licenseOverride
dependency,dependencyUrl,licenseOverride,copyright,sourceURL
"webrick:1.3.1",,BSD-2-Clause-FreeBSD
"bundler:1.16.0",https://rubygems.org/gems/bundler/versions/1.16.0,UnacceptableLicense|MIT
"webhdfs:0.8.0",,Apache-2.0
@ -58,3 +58,5 @@ dependency,dependencyUrl,licenseOverride
"json-parser:",https://rubygems.org/gems/json-parser/versions/0.0.1,Apache-2.0
"junit:junit:4.12",https://github.com/junit-team/junit4,Apache-2.0
"json-generator",https://github.com/flori/json,Ruby
"tzinfo:",https://github.com/tzinfo/tzinfo,MIT,Philip Ross
"Red Hat Universal Base Image minimal:8",https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8,Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf,,https://oss-dependencies.elastic.co/redhat/ubi/ubi-minimal-8-source.tar.gz

Can't render this file because it has a wrong number of fields in line 2.

View file

@ -1,4 +1,4 @@
dependency,dependencyUrl,licenseOverride
dependency,dependencyUrl,licenseOverride,copyright,sourceURL
"webrick:1.3.1",,BSD-2-Clause-FreeBSD
"bundler:1.16.0",https://rubygems.org/gems/bundler/versions/1.16.0,MIT
"webhdfs:0.8.0",,Apache-2.0
@ -59,3 +59,5 @@ dependency,dependencyUrl,licenseOverride
"json-parser:",https://rubygems.org/gems/json-parser/versions/0.0.1,Apache-2.0
"junit:junit:4.12",https://github.com/junit-team/junit4,Apache-2.0
"json-generator",https://github.com/flori/json,Ruby
"tzinfo:",https://github.com/tzinfo/tzinfo,MIT,Philip Ross
"Red Hat Universal Base Image minimal:8",https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8,Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf,,https://oss-dependencies.elastic.co/redhat/ubi/ubi-minimal-8-source.tar.gz

Can't render this file because it has a wrong number of fields in line 2.

View file

@ -1,4 +1,4 @@
dependency,dependencyUrl,licenseOverride
dependency,dependencyUrl,licenseOverride,copyright,sourceURL
"co.elastic:noNoticeDep:0.0.1",,MIT
"webrick:1.3.1",,BSD-2-Clause-FreeBSD
"bundler:1.16.0",https://rubygems.org/gems/bundler/versions/1.16.0,MIT
@ -61,3 +61,6 @@ dependency,dependencyUrl,licenseOverride
"junit:junit:4.12",https://github.com/junit-team/junit4,Apache-2.0
"junit:junit:4.12",https://github.com/junit-team/junit4,Apache-2.0
"json-generator",https://github.com/flori/json,Ruby
"tzinfo:",https://github.com/tzinfo/tzinfo,MIT,Philip Ross
"Red Hat Universal Base Image minimal:8",https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8,Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf,,https://oss-dependencies.elastic.co/redhat/ubi/ubi-minimal-8-source.tar.gz

Can't render this file because it has a wrong number of fields in line 2.

View file

@ -59,3 +59,5 @@ dependency,dependencyUrl,licenseOverride
"json-parser:",,Apache-2.0
"junit:junit:4.12",https://github.com/junit-team/junit4,Apache-2.0
"json-generator",https://github.com/flori/json,Ruby
"tzinfo:",https://github.com/tzinfo/tzinfo,MIT,Philip Ross
"Red Hat Universal Base Image minimal:8",https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8,Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf,,https://oss-dependencies.elastic.co/redhat/ubi/ubi-minimal-8-source.tar.gz

Can't render this file because it has a wrong number of fields in line 62.

View file

@ -56,3 +56,5 @@ dependency,dependencyUrl,licenseOverride
"json-parser:",https://rubygems.org/gems/json-parser/versions/0.0.1,Apache-2.0
"junit:junit:4.12",https://github.com/junit-team/junit4,Apache-2.0
"json-generator",https://github.com/flori/json,Ruby
"tzinfo:",https://github.com/tzinfo/tzinfo,MIT,Philip Ross
"Red Hat Universal Base Image minimal:8",https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8,Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf,,https://oss-dependencies.elastic.co/redhat/ubi/ubi-minimal-8-source.tar.gz

Can't render this file because it has a wrong number of fields in line 59.

View file

@ -1,15 +1,17 @@
name,version,url,license
bundler,1.16.1,http://bundler.io,MIT
bundler,1.16.0,http://bundler.io,MIT
filesize,0.0.4,http://filesize.rubyforge.org/,UNKNOWN
jar-dependencies,0.3.12,https://github.com/mkristian/jar-dependencies,MIT
jar-dependencies,0.3.11,https://github.com/mkristian/jar-dependencies,MIT
jar-dependencies,0.3.10,https://github.com/mkristian/jar-dependencies,MIT
jruby-openssl,0.9.21,https://github.com/jruby/jruby-openssl,EPL-1.0|GPL-2.0|LGPL-2.1
jruby-openssl,0.9.20,https://github.com/jruby/jruby-openssl,EPL-1.0|GPL-2.0|LGPL-2.1
jruby-readline,1.1.1,https://github.com/jruby/jruby,EPL-1.0|GPL-2.0|LGPL-2.1
com.fasterxml.jackson.core:jackson-core,2.7.3,https://github.com/FasterXML/jackson-core,Apache-2.0
com.fasterxml.jackson.core:jackson-core,2.9.1,https://github.com/FasterXML/jackson-core,Apache-2.0
control.js,,,MIT
json-generator,,https://github.com/flori/json,Ruby
json-parser,,https://github.com/flori/json,Ruby
name,version,url,license,copyright,sourceURL
bundler,1.16.1,http://bundler.io,MIT,,
bundler,1.16.0,http://bundler.io,MIT,,
filesize,0.0.4,http://filesize.rubyforge.org/,UNKNOWN,,
jar-dependencies,0.3.12,https://github.com/mkristian/jar-dependencies,MIT,,
jar-dependencies,0.3.11,https://github.com/mkristian/jar-dependencies,MIT,,
jar-dependencies,0.3.10,https://github.com/mkristian/jar-dependencies,MIT,,
jruby-openssl,0.9.21,https://github.com/jruby/jruby-openssl,EPL-1.0|GPL-2.0|LGPL-2.1,,
jruby-openssl,0.9.20,https://github.com/jruby/jruby-openssl,EPL-1.0|GPL-2.0|LGPL-2.1,,
jruby-readline,1.1.1,https://github.com/jruby/jruby,EPL-1.0|GPL-2.0|LGPL-2.1,,
com.fasterxml.jackson.core:jackson-core,2.7.3,https://github.com/FasterXML/jackson-core,Apache-2.0,,
com.fasterxml.jackson.core:jackson-core,2.9.1,https://github.com/FasterXML/jackson-core,Apache-2.0,,
control.js,,,MIT,,
json-generator,,https://github.com/flori/json,Ruby,,
json-parser,,https://github.com/flori/json,Ruby,,
tzinfo,,https://github.com/tzinfo/tzinfo,MIT,Philip Ross,
Red Hat Universal Base Image minimal,8,https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8,Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf,,https://oss-dependencies.elastic.co/redhat/ubi/ubi-minimal-8-source.tar.gz
1 name version url license copyright sourceURL
2 bundler 1.16.1 http://bundler.io MIT
3 bundler 1.16.0 http://bundler.io MIT
4 filesize 0.0.4 http://filesize.rubyforge.org/ UNKNOWN
5 jar-dependencies 0.3.12 https://github.com/mkristian/jar-dependencies MIT
6 jar-dependencies 0.3.11 https://github.com/mkristian/jar-dependencies MIT
7 jar-dependencies 0.3.10 https://github.com/mkristian/jar-dependencies MIT
8 jruby-openssl 0.9.21 https://github.com/jruby/jruby-openssl EPL-1.0|GPL-2.0|LGPL-2.1
9 jruby-openssl 0.9.20 https://github.com/jruby/jruby-openssl EPL-1.0|GPL-2.0|LGPL-2.1
10 jruby-readline 1.1.1 https://github.com/jruby/jruby EPL-1.0|GPL-2.0|LGPL-2.1
11 com.fasterxml.jackson.core:jackson-core 2.7.3 https://github.com/FasterXML/jackson-core Apache-2.0
12 com.fasterxml.jackson.core:jackson-core 2.9.1 https://github.com/FasterXML/jackson-core Apache-2.0
13 control.js MIT
14 json-generator https://github.com/flori/json Ruby
15 json-parser https://github.com/flori/json Ruby
16 tzinfo https://github.com/tzinfo/tzinfo MIT Philip Ross
17 Red Hat Universal Base Image minimal 8 https://catalog.redhat.com/software/containers/ubi8/ubi-minimal/5c359a62bed8bd75a2c3fba8 Custom;https://www.redhat.com/licenses/EULA_Red_Hat_Universal_Base_Image_English_20190422.pdf https://oss-dependencies.elastic.co/redhat/ubi/ubi-minimal-8-source.tar.gz