From a1fb9d7efd4e0d23500396adb909a2fedc353f1a Mon Sep 17 00:00:00 2001 From: Keith Zantow Date: Tue, 23 Jul 2024 18:14:54 -0400 Subject: [PATCH] chore: refactor pom cataloger to scan and index all poms in the resolver Signed-off-by: Keith Zantow --- .../internal/pkgtest/test_generic_parser.go | 5 + syft/pkg/cataloger/java/archive_parser.go | 7 +- .../pkg/cataloger/java/archive_parser_test.go | 9 +- syft/pkg/cataloger/java/cataloger.go | 7 +- syft/pkg/cataloger/java/maven_resolver.go | 4 +- .../pkg/cataloger/java/maven_resolver_test.go | 2 +- syft/pkg/cataloger/java/parse_pom_xml.go | 63 +- syft/pkg/cataloger/java/parse_pom_xml_test.go | 52 +- .../test-fixtures/pom/commons-text.pom.xml | 575 ------------------ .../pom/{relative => local}/child-1/pom.xml | 0 .../pom/local/commons-text-1.10.0/pom.xml | 263 ++++++++ .../example-java-app-maven}/pom.xml | 0 .../pom/{relative => local}/parent-1/pom.xml | 1 - .../pom/{relative => local}/parent-2/pom.xml | 0 14 files changed, 363 insertions(+), 625 deletions(-) delete mode 100644 syft/pkg/cataloger/java/test-fixtures/pom/commons-text.pom.xml rename syft/pkg/cataloger/java/test-fixtures/pom/{relative => local}/child-1/pom.xml (100%) create mode 100644 syft/pkg/cataloger/java/test-fixtures/pom/local/commons-text-1.10.0/pom.xml rename syft/pkg/cataloger/java/test-fixtures/pom/{ => local/example-java-app-maven}/pom.xml (100%) rename syft/pkg/cataloger/java/test-fixtures/pom/{relative => local}/parent-1/pom.xml (98%) rename syft/pkg/cataloger/java/test-fixtures/pom/{relative => local}/parent-2/pom.xml (100%) diff --git a/syft/pkg/cataloger/internal/pkgtest/test_generic_parser.go b/syft/pkg/cataloger/internal/pkgtest/test_generic_parser.go index a3cf11dece8..2dcbb7f8bec 100644 --- a/syft/pkg/cataloger/internal/pkgtest/test_generic_parser.go +++ b/syft/pkg/cataloger/internal/pkgtest/test_generic_parser.go @@ -310,6 +310,11 @@ func TestFileParser(t *testing.T, fixturePath string, parser generic.Parser, exp NewCatalogTester().FromFile(t, fixturePath).Expects(expectedPkgs, expectedRelationships).TestParser(t, parser) } +func TestCataloger(t *testing.T, fixtureDir string, cataloger pkg.Cataloger, expectedPkgs []pkg.Package, expectedRelationships []artifact.Relationship) { + t.Helper() + NewCatalogTester().FromDirectory(t, fixtureDir).Expects(expectedPkgs, expectedRelationships).TestCataloger(t, cataloger) +} + func TestFileParserWithEnv(t *testing.T, fixturePath string, parser generic.Parser, env *generic.Environment, expectedPkgs []pkg.Package, expectedRelationships []artifact.Relationship) { t.Helper() diff --git a/syft/pkg/cataloger/java/archive_parser.go b/syft/pkg/cataloger/java/archive_parser.go index c6ed0377064..8f21702be69 100644 --- a/syft/pkg/cataloger/java/archive_parser.go +++ b/syft/pkg/cataloger/java/archive_parser.go @@ -10,6 +10,7 @@ import ( "github.com/vifraa/gopom" + "github.com/anchore/syft/internal" intFile "github.com/anchore/syft/internal/file" "github.com/anchore/syft/internal/licenses" "github.com/anchore/syft/internal/log" @@ -51,7 +52,7 @@ type archiveParser struct { fileInfo archiveFilename detectNested bool cfg ArchiveCatalogerConfig - maven mavenResolver + maven *mavenResolver } type genericArchiveParserAdapter struct { @@ -382,7 +383,7 @@ func (j *archiveParser) discoverPkgsFromAllMavenFiles(ctx context.Context, paren parsedPom = proj } - pkgFromPom := newPackageFromMavenData(ctx, &j.maven, propertiesObj, parsedPom, parentPkg, j.location) + pkgFromPom := newPackageFromMavenData(ctx, j.maven, propertiesObj, parsedPom, parentPkg, j.location) if pkgFromPom != nil { pkgs = append(pkgs, *pkgFromPom) } @@ -396,7 +397,7 @@ func getDigestsFromArchive(archivePath string) ([]file.Digest, error) { if err != nil { return nil, fmt.Errorf("unable to open archive path (%s): %w", archivePath, err) } - defer archiveCloser.Close() + defer internal.CloseAndLogError(archiveCloser, archivePath) // grab and assign digest for the entire archive digests, err := intFile.NewDigestsFromFile(archiveCloser, javaArchiveHashes) diff --git a/syft/pkg/cataloger/java/archive_parser_test.go b/syft/pkg/cataloger/java/archive_parser_test.go index 2a2f13569de..564ae4c3e1a 100644 --- a/syft/pkg/cataloger/java/archive_parser_test.go +++ b/syft/pkg/cataloger/java/archive_parser_test.go @@ -21,6 +21,7 @@ import ( "github.com/stretchr/testify/require" "github.com/vifraa/gopom" + "github.com/anchore/syft/internal" "github.com/anchore/syft/syft/artifact" "github.com/anchore/syft/syft/file" "github.com/anchore/syft/syft/license" @@ -54,13 +55,13 @@ func generateMockMavenHandler(responseFixture string) func(w http.ResponseWriter // Set the Content-Type header to indicate that the response is XML w.Header().Set("Content-Type", "application/xml") // Copy the file's content to the response writer - file, err := os.Open(responseFixture) + f, err := os.Open(responseFixture) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } - defer file.Close() - _, err = io.Copy(w, file) + defer internal.CloseAndLogError(f, responseFixture) + _, err = io.Copy(w, f) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return @@ -1081,7 +1082,7 @@ func Test_newPackageFromMavenData(t *testing.T) { test.expectedParent.Locations = locations r := newMavenResolver(nil, DefaultArchiveCatalogerConfig()) - actualPackage := newPackageFromMavenData(context.Background(), &r, test.props, test.project, test.parent, file.NewLocation(virtualPath)) + actualPackage := newPackageFromMavenData(context.Background(), r, test.props, test.project, test.parent, file.NewLocation(virtualPath)) if test.expectedPackage == nil { require.Nil(t, actualPackage) } else { diff --git a/syft/pkg/cataloger/java/cataloger.go b/syft/pkg/cataloger/java/cataloger.go index 35f4cbdb2e9..11e48b7f5ad 100644 --- a/syft/pkg/cataloger/java/cataloger.go +++ b/syft/pkg/cataloger/java/cataloger.go @@ -32,10 +32,9 @@ func NewArchiveCataloger(cfg ArchiveCatalogerConfig) pkg.Cataloger { // NewPomCataloger returns a cataloger capable of parsing dependencies from a pom.xml file. // Pom files list dependencies that maybe not be locally installed yet. func NewPomCataloger(cfg ArchiveCatalogerConfig) pkg.Cataloger { - gap := newGenericArchiveParserAdapter(cfg) - - return generic.NewCataloger("java-pom-cataloger"). - WithParserByGlobs(gap.parsePomXML, "**/pom.xml") + return pomXMLCataloger{ + cfg: cfg, + } } // NewGradleLockfileCataloger returns a cataloger capable of parsing dependencies from a gradle.lockfile file. diff --git a/syft/pkg/cataloger/java/maven_resolver.go b/syft/pkg/cataloger/java/maven_resolver.go index a5f64478e36..47bfc369ee3 100644 --- a/syft/pkg/cataloger/java/maven_resolver.go +++ b/syft/pkg/cataloger/java/maven_resolver.go @@ -74,8 +74,8 @@ type mavenResolver struct { // newMavenResolver constructs a new mavenResolver with the given configuration. // NOTE: the fileResolver is optional and if provided will be used to resolve parent poms by relative path -func newMavenResolver(fileResolver file.Resolver, cfg ArchiveCatalogerConfig) mavenResolver { - return mavenResolver{ +func newMavenResolver(fileResolver file.Resolver, cfg ArchiveCatalogerConfig) *mavenResolver { + return &mavenResolver{ cfg: cfg, cache: cache.GetManager().GetCache("java/maven/repo", "v1"), resolved: map[mavenID]*gopom.Project{}, diff --git a/syft/pkg/cataloger/java/maven_resolver_test.go b/syft/pkg/cataloger/java/maven_resolver_test.go index 3154b05ad51..5a16a5b6e64 100644 --- a/syft/pkg/cataloger/java/maven_resolver_test.go +++ b/syft/pkg/cataloger/java/maven_resolver_test.go @@ -249,7 +249,7 @@ func Test_mavenResolverRemote(t *testing.T) { } func Test_relativePathParent(t *testing.T) { - resolver, err := fileresolver.NewFromDirectory("test-fixtures/pom/relative", "") + resolver, err := fileresolver.NewFromDirectory("test-fixtures/pom/local", "") require.NoError(t, err) r := newMavenResolver(resolver, DefaultArchiveCatalogerConfig()) diff --git a/syft/pkg/cataloger/java/parse_pom_xml.go b/syft/pkg/cataloger/java/parse_pom_xml.go index 27bee293d1f..fa11d93672b 100644 --- a/syft/pkg/cataloger/java/parse_pom_xml.go +++ b/syft/pkg/cataloger/java/parse_pom_xml.go @@ -13,34 +13,79 @@ import ( "github.com/vifraa/gopom" "golang.org/x/net/html/charset" + "github.com/anchore/syft/internal" "github.com/anchore/syft/internal/log" "github.com/anchore/syft/syft/artifact" "github.com/anchore/syft/syft/file" "github.com/anchore/syft/syft/pkg" - "github.com/anchore/syft/syft/pkg/cataloger/generic" ) const pomXMLGlob = "*pom.xml" -func (gap genericArchiveParserAdapter) parsePomXML(ctx context.Context, fileResolver file.Resolver, _ *generic.Environment, reader file.LocationReadCloser) ([]pkg.Package, []artifact.Relationship, error) { - pom, err := decodePomXML(reader) - if err != nil || pom == nil { +type pomXMLCataloger struct { + cfg ArchiveCatalogerConfig +} + +func (p pomXMLCataloger) Name() string { + return "java-pom-cataloger" +} + +func (p pomXMLCataloger) Catalog(ctx context.Context, fileResolver file.Resolver) ([]pkg.Package, []artifact.Relationship, error) { + locations, err := fileResolver.FilesByGlob("**/pom.xml") + if err != nil { return nil, nil, err } - r := newMavenResolver(fileResolver, gap.cfg) - r.pomLocations[pom] = reader.Location // store the location this pom was resolved in order to attempt parent pom lookups + r := newMavenResolver(fileResolver, p.cfg) + + var poms []*gopom.Project + for _, pomLocation := range locations { + pom, err := readPomFromLocation(fileResolver, pomLocation) + if err != nil || pom == nil { + log.Debugf("error while getting contents for: %v %v", pomLocation.RealPath, err) + continue + } + + poms = append(poms, pom) + + // store information about this pom for future lookups + r.pomLocations[pom] = pomLocation + r.resolved[newMavenIDFromPom(pom)] = pom + } + + var pkgs []pkg.Package + for _, pom := range poms { + pkgs = append(pkgs, processPomXML(ctx, r, pom, r.pomLocations[pom])...) + } + return pkgs, nil, nil +} + +func readPomFromLocation(fileResolver file.Resolver, pomLocation file.Location) (*gopom.Project, error) { + contents, err := fileResolver.FileContentsByLocation(pomLocation) + if err != nil { + return nil, err + } + defer internal.CloseAndLogError(contents, pomLocation.RealPath) + + pom, err := decodePomXML(contents) + if err != nil || pom == nil { + return nil, err + } + return pom, nil +} +func processPomXML(ctx context.Context, r *mavenResolver, pom *gopom.Project, loc file.Location) []pkg.Package { var pkgs []pkg.Package + for _, dep := range pomDependencies(pom) { id := newMavenID(dep.GroupID, dep.ArtifactID, dep.Version) log.Tracef("adding dependency to SBOM: %v", id) p, err := newPackageFromDependency( ctx, - &r, + r, pom, dep, - reader.Location.WithAnnotation(pkg.EvidenceAnnotationKey, pkg.PrimaryEvidenceAnnotation), + loc.WithAnnotation(pkg.EvidenceAnnotationKey, pkg.PrimaryEvidenceAnnotation), ) if err != nil { log.Debugf("error adding dependency %v: %v", id, err) @@ -51,7 +96,7 @@ func (gap genericArchiveParserAdapter) parsePomXML(ctx context.Context, fileReso pkgs = append(pkgs, *p) } - return pkgs, nil, nil + return pkgs } func newPomProject(ctx context.Context, r *mavenResolver, path string, pom *gopom.Project) *pkg.JavaPomProject { diff --git a/syft/pkg/cataloger/java/parse_pom_xml_test.go b/syft/pkg/cataloger/java/parse_pom_xml_test.go index 2806324ab5e..201bbf2496c 100644 --- a/syft/pkg/cataloger/java/parse_pom_xml_test.go +++ b/syft/pkg/cataloger/java/parse_pom_xml_test.go @@ -21,11 +21,11 @@ import ( func Test_parsePomXML(t *testing.T) { tests := []struct { - input string + dir string expected []pkg.Package }{ { - input: "test-fixtures/pom/pom.xml", + dir: "test-fixtures/pom/local/example-java-app-maven", expected: []pkg.Package{ { Name: "joda-time", @@ -59,19 +59,19 @@ func Test_parsePomXML(t *testing.T) { } for _, test := range tests { - t.Run(test.input, func(t *testing.T) { + t.Run(test.dir, func(t *testing.T) { for i := range test.expected { - test.expected[i].Locations.Add(file.NewLocation(test.input)) + test.expected[i].Locations.Add(file.NewLocation("pom.xml")) } - gap := newGenericArchiveParserAdapter(ArchiveCatalogerConfig{ + cat := NewPomCataloger(ArchiveCatalogerConfig{ ArchiveSearchConfig: cataloging.ArchiveSearchConfig{ IncludeIndexedArchives: true, IncludeUnindexedArchives: true, }, }) - pkgtest.TestFileParser(t, test.input, gap.parsePomXML, test.expected, nil) + pkgtest.TestCataloger(t, test.dir, cat, test.expected, nil) }) } } @@ -132,30 +132,30 @@ func Test_decodePomXML_surviveNonUtf8Encoding(t *testing.T) { func Test_parseCommonsTextPomXMLProject(t *testing.T) { tests := []struct { - input string + dir string expected []pkg.Package }{ { - input: "test-fixtures/pom/commons-text.pom.xml", + dir: "test-fixtures/pom/local/commons-text-1.10.0", expected: getCommonsTextExpectedPackages(), }, } for _, test := range tests { - t.Run(test.input, func(t *testing.T) { + t.Run(test.dir, func(t *testing.T) { for i := range test.expected { - test.expected[i].Locations.Add(file.NewLocation(test.input)) + test.expected[i].Locations.Add(file.NewLocation("pom.xml")) } - gap := newGenericArchiveParserAdapter(ArchiveCatalogerConfig{ + cat := NewPomCataloger(ArchiveCatalogerConfig{ ArchiveSearchConfig: cataloging.ArchiveSearchConfig{ IncludeIndexedArchives: true, IncludeUnindexedArchives: true, }, UseMavenLocalRepository: false, }) - pkgtest.TestFileParser(t, test.input, gap.parsePomXML, test.expected, nil) + pkgtest.TestCataloger(t, test.dir, cat, test.expected, nil) }) } } @@ -180,22 +180,22 @@ func Test_parseCommonsTextPomXMLProjectWithLocalRepository(t *testing.T) { } tests := []struct { - input string + dir string expected []pkg.Package }{ { - input: "test-fixtures/pom/commons-text.pom.xml", + dir: "test-fixtures/pom/local/commons-text-1.10.0", expected: expectedPackages, }, } for _, test := range tests { - t.Run(test.input, func(t *testing.T) { + t.Run(test.dir, func(t *testing.T) { for i := range test.expected { - test.expected[i].Locations.Add(file.NewLocation(test.input)) + test.expected[i].Locations.Add(file.NewLocation("pom.xml")) } - gap := newGenericArchiveParserAdapter(ArchiveCatalogerConfig{ + cat := NewPomCataloger(ArchiveCatalogerConfig{ ArchiveSearchConfig: cataloging.ArchiveSearchConfig{ IncludeIndexedArchives: true, IncludeUnindexedArchives: true, @@ -204,7 +204,7 @@ func Test_parseCommonsTextPomXMLProjectWithLocalRepository(t *testing.T) { MavenLocalRepositoryDir: "test-fixtures/pom/maven-repo", MaxParentRecursiveDepth: 5, }) - pkgtest.TestFileParser(t, test.input, gap.parsePomXML, test.expected, nil) + pkgtest.TestCataloger(t, test.dir, cat, test.expected, nil) }) } } @@ -231,22 +231,22 @@ func Test_parseCommonsTextPomXMLProjectWithNetwork(t *testing.T) { } tests := []struct { - input string + dir string expected []pkg.Package }{ { - input: "test-fixtures/pom/commons-text.pom.xml", + dir: "test-fixtures/pom/local/commons-text-1.10.0", expected: expectedPackages, }, } for _, test := range tests { - t.Run(test.input, func(t *testing.T) { + t.Run(test.dir, func(t *testing.T) { for i := range test.expected { - test.expected[i].Locations.Add(file.NewLocation(test.input)) + test.expected[i].Locations.Add(file.NewLocation("pom.xml")) } - gap := newGenericArchiveParserAdapter(ArchiveCatalogerConfig{ + cat := NewPomCataloger(ArchiveCatalogerConfig{ ArchiveSearchConfig: cataloging.ArchiveSearchConfig{ IncludeIndexedArchives: true, IncludeUnindexedArchives: true, @@ -256,7 +256,7 @@ func Test_parseCommonsTextPomXMLProjectWithNetwork(t *testing.T) { UseMavenLocalRepository: false, MaxParentRecursiveDepth: 5, }) - pkgtest.TestFileParser(t, test.input, gap.parsePomXML, test.expected, nil) + pkgtest.TestCataloger(t, test.dir, cat, test.expected, nil) }) } } @@ -334,7 +334,7 @@ func Test_parsePomXMLProject(t *testing.T) { pom, err := gopom.ParseFromReader(fixture) require.NoError(t, err) - actual := newPomProject(context.Background(), &r, fixture.Name(), pom) + actual := newPomProject(context.Background(), r, fixture.Name(), pom) assert.NoError(t, err) assert.Equal(t, test.project, actual) @@ -400,7 +400,7 @@ func Test_pomParent(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { r := newMavenResolver(nil, DefaultArchiveCatalogerConfig()) - assert.Equal(t, test.expected, pomParent(context.Background(), &r, &gopom.Project{Parent: test.input})) + assert.Equal(t, test.expected, pomParent(context.Background(), r, &gopom.Project{Parent: test.input})) }) } } diff --git a/syft/pkg/cataloger/java/test-fixtures/pom/commons-text.pom.xml b/syft/pkg/cataloger/java/test-fixtures/pom/commons-text.pom.xml deleted file mode 100644 index 6f54a6ed6b1..00000000000 --- a/syft/pkg/cataloger/java/test-fixtures/pom/commons-text.pom.xml +++ /dev/null @@ -1,575 +0,0 @@ - - - - 4.0.0 - - org.apache.commons - commons-parent - 54 - - commons-text - 1.10.0 - Apache Commons Text - Apache Commons Text is a library focused on algorithms working on strings. - https://commons.apache.org/proper/commons-text - - - ISO-8859-1 - UTF-8 - 1.8 - 1.8 - - text - org.apache.commons.text - - 1.10.0 - (Java 8+) - - TEXT - 12318221 - - text - https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-text - site-content - - 5.9.1 - 3.2.0 - 9.3 - - 4.7.2.0 - 4.7.2 - 3.19.0 - 6.49.0 - - 4.8.0 - 0.8.8 - - - 3.10.0 - 3.4.1 - - - 22.0.0.2 - 1.4 - - 0.16.0 - false - - 1.35 - 3.1.2 - - - 1.9 - RC1 - true - scm:svn:https://dist.apache.org/repos/dist/dev/commons/${commons.componentid} - Gary Gregory - 86fdc7e2a11262cb - - - - - org.apache.commons - commons-lang3 - 3.12.0 - - - - org.junit.jupiter - junit-jupiter - test - - - org.assertj - assertj-core - 3.23.1 - test - - - commons-io - commons-io - 2.11.0 - test - - - org.mockito - - mockito-inline - ${commons.mockito.version} - test - - - org.graalvm.js - js - ${graalvm.version} - test - - - org.graalvm.js - js-scriptengine - ${graalvm.version} - test - - - org.apache.commons - commons-rng-simple - ${commons.rng.version} - test - - - org.openjdk.jmh - jmh-core - ${jmh.version} - test - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh.version} - test - - - - - clean verify apache-rat:check japicmp:cmp checkstyle:check spotbugs:check javadoc:javadoc - - - - org.apache.rat - apache-rat-plugin - - - site-content/** - src/site/resources/download_lang.cgi - src/test/resources/org/apache/commons/text/stringEscapeUtilsTestData.txt - src/test/resources/org/apache/commons/text/lcs-perf-analysis-inputs.csv - src/site/resources/release-notes/RELEASE-NOTES-*.txt - - - - - maven-pmd-plugin - ${commons.pmd.version} - - ${maven.compiler.target} - - - - net.sourceforge.pmd - pmd-core - ${commons.pmd-impl.version} - - - net.sourceforge.pmd - pmd-java - ${commons.pmd-impl.version} - - - net.sourceforge.pmd - pmd-javascript - ${commons.pmd-impl.version} - - - net.sourceforge.pmd - pmd-jsp - ${commons.pmd-impl.version} - - - - - - - - maven-checkstyle-plugin - ${checkstyle.plugin.version} - - false - src/conf/checkstyle.xml - src/conf/checkstyle-header.txt - src/conf/checkstyle-suppressions.xml - src/conf/checkstyle-suppressions.xml - true - **/generated/**.java,**/jmh_generated/**.java - - - - com.puppycrawl.tools - checkstyle - ${checkstyle.version} - - - - - com.github.spotbugs - spotbugs-maven-plugin - ${commons.spotbugs.plugin.version} - - - com.github.spotbugs - spotbugs - ${commons.spotbugs.impl.version} - - - - src/conf/spotbugs-exclude-filter.xml - - - - maven-assembly-plugin - - - src/assembly/bin.xml - src/assembly/src.xml - - gnu - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - - ${commons.module.name} - - - - - - org.apache.maven.plugins - maven-scm-publish-plugin - - - javadocs - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - ${maven.compiler.source} - - - - - - - - - maven-checkstyle-plugin - ${checkstyle.plugin.version} - - false - src/conf/checkstyle.xml - src/conf/checkstyle-header.txt - src/conf/checkstyle-suppressions.xml - src/conf/checkstyle-suppressions.xml - true - **/generated/**.java,**/jmh_generated/**.java - - - - - checkstyle - - - - - - - com.github.spotbugs - spotbugs-maven-plugin - ${commons.spotbugs.plugin.version} - - src/conf/spotbugs-exclude-filter.xml - - - - com.github.siom79.japicmp - japicmp-maven-plugin - - - maven-pmd-plugin - 3.19.0 - - ${maven.compiler.target} - - - - - pmd - cpd - - - - - - org.codehaus.mojo - taglist-maven-plugin - 3.0.0 - - - - - Needs Work - - - TODO - exact - - - FIXME - exact - - - XXX - exact - - - - - Noteable Markers - - - NOTE - exact - - - NOPMD - exact - - - NOSONAR - exact - - - - - - - - - - - 2014 - - - - kinow - Bruno P. Kinoshita - kinow@apache.org - - - britter - Benedikt Ritter - britter@apache.org - - - chtompki - Rob Tompkins - chtompki@apache.org - - - ggregory - Gary Gregory - ggregory at apache.org - https://www.garygregory.com - The Apache Software Foundation - https://www.apache.org/ - - PMC Member - - America/New_York - - https://people.apache.org/~ggregory/img/garydgregory80.png - - - - djones - Duncan Jones - djones@apache.org - - - - - - Don Jeba - donjeba@yahoo.com - - - Sampanna Kahu - - - Jarek Strzelecki - - - Lee Adcock - - - Amey Jadiye - ameyjadiye@gmail.com - - - Arun Vinud S S - - - Ioannis Sermetziadis - - - Jostein Tveit - - - Luciano Medallia - - - Jan Martin Keil - - - Nandor Kollar - - - Nick Wong - - - Ali Ghanbari - https://ali-ghanbari.github.io/ - - - - - scm:git:https://gitbox.apache.org/repos/asf/commons-text - scm:git:https://gitbox.apache.org/repos/asf/commons-text - https://gitbox.apache.org/repos/asf?p=commons-text.git - - - - jira - https://issues.apache.org/jira/browse/TEXT - - - - - apache.website - Apache Commons Site - scm:svn:https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-text/ - - - - - - setup-checkout - - - site-content - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - prepare-checkout - - run - - pre-site - - - - - - - - - - - - - - - - - - - - - - - - java9+ - - [9,) - - - - true - - - - benchmark - - true - org.apache - - - - - org.codehaus.mojo - exec-maven-plugin - 3.1.0 - - - benchmark - test - - exec - - - test - java - - -classpath - - org.openjdk.jmh.Main - -rf - json - -rff - target/jmh-result.${benchmark}.json - ${benchmark} - - - - - - - - - - \ No newline at end of file diff --git a/syft/pkg/cataloger/java/test-fixtures/pom/relative/child-1/pom.xml b/syft/pkg/cataloger/java/test-fixtures/pom/local/child-1/pom.xml similarity index 100% rename from syft/pkg/cataloger/java/test-fixtures/pom/relative/child-1/pom.xml rename to syft/pkg/cataloger/java/test-fixtures/pom/local/child-1/pom.xml diff --git a/syft/pkg/cataloger/java/test-fixtures/pom/local/commons-text-1.10.0/pom.xml b/syft/pkg/cataloger/java/test-fixtures/pom/local/commons-text-1.10.0/pom.xml new file mode 100644 index 00000000000..e4ad83f1596 --- /dev/null +++ b/syft/pkg/cataloger/java/test-fixtures/pom/local/commons-text-1.10.0/pom.xml @@ -0,0 +1,263 @@ + + + + 4.0.0 + + org.apache.commons + commons-parent + 54 + + commons-text + 1.10.0 + Apache Commons Text + Apache Commons Text is a library focused on algorithms working on strings. + https://commons.apache.org/proper/commons-text + + + ISO-8859-1 + UTF-8 + 1.8 + 1.8 + + text + org.apache.commons.text + + 1.10.0 + (Java 8+) + + TEXT + 12318221 + + text + https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-text + site-content + + 5.9.1 + 3.2.0 + 9.3 + + 4.7.2.0 + 4.7.2 + 3.19.0 + 6.49.0 + + 4.8.0 + 0.8.8 + + + 3.10.0 + 3.4.1 + + + 22.0.0.2 + 1.4 + + 0.16.0 + false + + 1.35 + 3.1.2 + + + 1.9 + RC1 + true + scm:svn:https://dist.apache.org/repos/dist/dev/commons/${commons.componentid} + Gary Gregory + 86fdc7e2a11262cb + + + + + org.apache.commons + commons-lang3 + 3.12.0 + + + + org.junit.jupiter + junit-jupiter + test + + + org.assertj + assertj-core + 3.23.1 + test + + + commons-io + commons-io + 2.11.0 + test + + + org.mockito + + mockito-inline + ${commons.mockito.version} + test + + + org.graalvm.js + js + ${graalvm.version} + test + + + org.graalvm.js + js-scriptengine + ${graalvm.version} + test + + + org.apache.commons + commons-rng-simple + ${commons.rng.version} + test + + + org.openjdk.jmh + jmh-core + ${jmh.version} + test + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + test + + + + 2014 + + + scm:git:https://gitbox.apache.org/repos/asf/commons-text + scm:git:https://gitbox.apache.org/repos/asf/commons-text + https://gitbox.apache.org/repos/asf?p=commons-text.git + + + + jira + https://issues.apache.org/jira/browse/TEXT + + + + + apache.website + Apache Commons Site + scm:svn:https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-text/ + + + + + + setup-checkout + + + site-content + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + prepare-checkout + + run + + pre-site + + + + + + + + + + + + + + + + + + + + + + + + java9+ + + [9,) + + + + true + + + + benchmark + + true + org.apache + + + + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + + benchmark + test + + exec + + + test + java + + -classpath + + org.openjdk.jmh.Main + -rf + json + -rff + target/jmh-result.${benchmark}.json + ${benchmark} + + + + + + + + + + \ No newline at end of file diff --git a/syft/pkg/cataloger/java/test-fixtures/pom/pom.xml b/syft/pkg/cataloger/java/test-fixtures/pom/local/example-java-app-maven/pom.xml similarity index 100% rename from syft/pkg/cataloger/java/test-fixtures/pom/pom.xml rename to syft/pkg/cataloger/java/test-fixtures/pom/local/example-java-app-maven/pom.xml diff --git a/syft/pkg/cataloger/java/test-fixtures/pom/relative/parent-1/pom.xml b/syft/pkg/cataloger/java/test-fixtures/pom/local/parent-1/pom.xml similarity index 98% rename from syft/pkg/cataloger/java/test-fixtures/pom/relative/parent-1/pom.xml rename to syft/pkg/cataloger/java/test-fixtures/pom/local/parent-1/pom.xml index 69ff49eff0c..4a6d1f323c2 100644 --- a/syft/pkg/cataloger/java/test-fixtures/pom/relative/parent-1/pom.xml +++ b/syft/pkg/cataloger/java/test-fixtures/pom/local/parent-1/pom.xml @@ -9,7 +9,6 @@ ../parent-2/pom.xml - my.org parent-one 3.11.0 pom diff --git a/syft/pkg/cataloger/java/test-fixtures/pom/relative/parent-2/pom.xml b/syft/pkg/cataloger/java/test-fixtures/pom/local/parent-2/pom.xml similarity index 100% rename from syft/pkg/cataloger/java/test-fixtures/pom/relative/parent-2/pom.xml rename to syft/pkg/cataloger/java/test-fixtures/pom/local/parent-2/pom.xml