github.com/lineaje-labs/syft@v0.98.1-0.20231227153149-9e393f60ff1b/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) *generic.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  		// java archives wrapped within rpm files
    29  		grp := newGenericRPMWrappedJavaArchiveParser(cfg)
    30  		c.WithParserByGlobs(grp.parseRPMJavaArchive, genericRpmGlobs...)
    31  	}
    32  	return c
    33  }
    34  
    35  // NewPomCataloger returns a cataloger capable of parsing dependencies from a pom.xml file.
    36  // Pom files list dependencies that maybe not be locally installed yet.
    37  func NewPomCataloger() pkg.Cataloger {
    38  	return generic.NewCataloger("java-pom-cataloger").
    39  		WithParserByGlobs(parserPomXML, "**/pom.xml")
    40  }
    41  
    42  // NewGradleLockfileCataloger returns a cataloger capable of parsing dependencies from a gradle.lockfile file.
    43  // Note: Older versions of lockfiles aren't supported yet
    44  func NewGradleLockfileCataloger() pkg.Cataloger {
    45  	return generic.NewCataloger("java-gradle-lockfile-cataloger").
    46  		WithParserByGlobs(parseGradleLockfile, gradleLockfileGlob)
    47  }