github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/syft/pkg/cataloger/java/cataloger.go (about)

     1  /*
     2  Package java provides a concrete Cataloger implementation for packages relating to the Java language ecosystem.
     3  */
     4  package java
     5  
     6  import (
     7  	"github.com/anchore/syft/syft/pkg"
     8  	"github.com/anchore/syft/syft/pkg/cataloger/generic"
     9  )
    10  
    11  // NewArchiveCataloger returns a new Java archive cataloger object for detecting packages with archives (jar, war, ear, par, sar, jpi, hpi, and native-image formats)
    12  func NewArchiveCataloger(cfg ArchiveCatalogerConfig) pkg.Cataloger {
    13  	gap := newGenericArchiveParserAdapter(cfg)
    14  
    15  	c := generic.NewCataloger("java-archive-cataloger").
    16  		WithParserByGlobs(gap.parseJavaArchive, archiveFormatGlobs...)
    17  
    18  	if cfg.IncludeIndexedArchives {
    19  		// java archives wrapped within zip files
    20  		gzp := newGenericZipWrappedJavaArchiveParser(cfg)
    21  		c.WithParserByGlobs(gzp.parseZipWrappedJavaArchive, genericZipGlobs...)
    22  	}
    23  
    24  	if cfg.IncludeUnindexedArchives {
    25  		// java archives wrapped within tar files
    26  		gtp := newGenericTarWrappedJavaArchiveParser(cfg)
    27  		c.WithParserByGlobs(gtp.parseTarWrappedJavaArchive, genericTarGlobs...)
    28  	}
    29  	return c
    30  }
    31  
    32  // NewPomCataloger returns a cataloger capable of parsing dependencies from a pom.xml file.
    33  // Pom files list dependencies that maybe not be locally installed yet.
    34  func NewPomCataloger(cfg ArchiveCatalogerConfig) pkg.Cataloger {
    35  	gap := newGenericArchiveParserAdapter(cfg)
    36  
    37  	return generic.NewCataloger("java-pom-cataloger").
    38  		WithParserByGlobs(gap.parserPomXML, "**/pom.xml")
    39  }
    40  
    41  // NewGradleLockfileCataloger returns a cataloger capable of parsing dependencies from a gradle.lockfile file.
    42  // Note: Older versions of lockfiles aren't supported yet
    43  func NewGradleLockfileCataloger() pkg.Cataloger {
    44  	return generic.NewCataloger("java-gradle-lockfile-cataloger").
    45  		WithParserByGlobs(parseGradleLockfile, gradleLockfileGlob)
    46  }