github.com/anchore/syft@v1.38.2/syft/pkg/cataloger/java/config.go (about) 1 package java 2 3 import ( 4 "strings" 5 6 "github.com/anchore/syft/syft/cataloging" 7 "github.com/anchore/syft/syft/pkg/cataloger/java/internal/maven" 8 ) 9 10 type ArchiveCatalogerConfig struct { 11 cataloging.ArchiveSearchConfig `yaml:",inline" json:"" mapstructure:",squash"` 12 13 // UseNetwork enables network operations for java package metadata enrichment, such as fetching parent POMs and license information. 14 // app-config: java.use-network 15 UseNetwork bool `yaml:"use-network" json:"use-network" mapstructure:"use-network"` 16 17 // UseMavenLocalRepository enables searching the local maven repository (~/.m2/repository by default) for parent POMs and other metadata. 18 // app-config: java.use-maven-local-repository 19 UseMavenLocalRepository bool `yaml:"use-maven-localrepository" json:"use-maven-localrepository" mapstructure:"use-maven-localrepository"` 20 21 // MavenLocalRepositoryDir specifies the location of the local maven repository. When not set, defaults to ~/.m2/repository. 22 // app-config: java.maven-local-repository-dir 23 MavenLocalRepositoryDir string `yaml:"maven-localrepository-dir" json:"maven-localrepository-dir" mapstructure:"maven-localrepository-dir"` 24 25 // MavenBaseURL specifies the base URL(s) to use for fetching POMs and metadata from maven central or other repositories. When not set, defaults to https://repo1.maven.org/maven2. 26 // app-config: java.maven-url 27 MavenBaseURL string `yaml:"maven-base-url" json:"maven-base-url" mapstructure:"maven-base-url"` 28 29 // MaxParentRecursiveDepth limits how many parent POMs will be fetched recursively before stopping. This prevents infinite loops or excessively deep parent chains. 30 // app-config: java.max-parent-recursive-depth 31 MaxParentRecursiveDepth int `yaml:"max-parent-recursive-depth" json:"max-parent-recursive-depth" mapstructure:"max-parent-recursive-depth"` 32 33 // ResolveTransitiveDependencies enables resolving transitive dependencies for java packages found within archives. 34 // app-config: java.resolve-transitive-dependencies 35 ResolveTransitiveDependencies bool `yaml:"resolve-transitive-dependencies" json:"resolve-transitive-dependencies" mapstructure:"resolve-transitive-dependencies"` 36 } 37 38 func DefaultArchiveCatalogerConfig() ArchiveCatalogerConfig { 39 mavenCfg := maven.DefaultConfig() 40 return ArchiveCatalogerConfig{ 41 ArchiveSearchConfig: cataloging.DefaultArchiveSearchConfig(), 42 UseNetwork: mavenCfg.UseNetwork, 43 UseMavenLocalRepository: mavenCfg.UseLocalRepository, 44 MavenLocalRepositoryDir: mavenCfg.LocalRepositoryDir, 45 MavenBaseURL: strings.Join(mavenCfg.Repositories, ","), 46 MaxParentRecursiveDepth: mavenCfg.MaxParentRecursiveDepth, 47 ResolveTransitiveDependencies: false, 48 } 49 } 50 51 func (j ArchiveCatalogerConfig) WithUseNetwork(input bool) ArchiveCatalogerConfig { 52 j.UseNetwork = input 53 return j 54 } 55 56 func (j ArchiveCatalogerConfig) WithUseMavenLocalRepository(input bool) ArchiveCatalogerConfig { 57 j.UseMavenLocalRepository = input 58 return j 59 } 60 61 func (j ArchiveCatalogerConfig) WithMavenLocalRepositoryDir(input string) ArchiveCatalogerConfig { 62 j.MavenLocalRepositoryDir = input 63 return j 64 } 65 66 func (j ArchiveCatalogerConfig) WithMavenBaseURL(input string) ArchiveCatalogerConfig { 67 if input != "" { 68 j.MavenBaseURL = input 69 } 70 return j 71 } 72 73 func (j ArchiveCatalogerConfig) WithResolveTransitiveDependencies(resolveTransitiveDependencies bool) ArchiveCatalogerConfig { 74 j.ResolveTransitiveDependencies = resolveTransitiveDependencies 75 return j 76 } 77 78 func (j ArchiveCatalogerConfig) WithArchiveTraversal(search cataloging.ArchiveSearchConfig, maxDepth int) ArchiveCatalogerConfig { 79 j.MaxParentRecursiveDepth = maxDepth 80 j.ArchiveSearchConfig = search 81 return j 82 } 83 84 func (j ArchiveCatalogerConfig) mavenConfig() maven.Config { 85 return maven.Config{ 86 UseNetwork: j.UseNetwork, 87 UseLocalRepository: j.UseMavenLocalRepository, 88 LocalRepositoryDir: j.MavenLocalRepositoryDir, 89 Repositories: strings.Split(j.MavenBaseURL, ","), 90 MaxParentRecursiveDepth: j.MaxParentRecursiveDepth, 91 } 92 }