Mojos (org.apache.maven.plugin.assembly.mojo)
Uses:
AssemblyArchiver
Provides:
implementation of AssemblyConfigurationSource, for use in assembly components
Notes:
AssemblyConfigurationSource transports build state given by mojo parameters to deeper assembly components
AssemblyArchiver abstracts the business of creating the assembly artifact from the mojos
AssemblyArchiver (org.apache.maven.plugin.assembly.archive)
Uses:
ArchiverManager
the set of ArchiveAssemblyPhase implementations
AssemblyDescriptorReader and AssemblyInterpolator
Provides:
logic to discover and read assembly descriptors
AssemblyDescriptorReader and AssemblyInterpolator help with this task
logic to discover and add filters that merge container descriptor files
these are implementations of ContainerDescriptorHandler
Notes:
Archiver instances are retrieved from the ArchiverManager
Archiver instances are wrapped with AssemblyProxyArchiver, which adds global prefixing, dry-run, and duplicate detection features
ArchiveAssemblyPhases execute the actual interaction with the (proxied) Archiver instance to produce the assembly
AssemblyProxyArchiver is the only one initialized as a POJO with the real Archiver component instance passed into the constructor; all other classes used by the AssemblyArchiver are components injected by Plexus
ArchiveAssemblyPhase instances are injected via a Map which is keyed by their respective role-hints; I don't believe the ordering of keys in this map is deterministic.
ContainerDescriptorHandler instances are components that are injected via a Map which is keyed by their respective role-hints. Custom implementations can be added via the plugin-level dependency configuration in the pom.xml
ArchiverAssemblyPhase (org.apache.maven.plugin.assembly.archive.phase)
Default Implementations:
ModuleSetAssemblyPhase
DependencySetAssemblyPhase
FileSetAssemblyPhase
FileItemAssemblyPhase
RepositoryAssemblyPhase
Uses:
ArchiverTask implementations, as POJOs
FileFormatter (FileItemAssemblyPhase)
RepositoryAssembler (from maven-repository-builder; used by RepositoryAssemblyPhase)
Notes:
Initialized as Plexus components
generally, each implementation handles one top-level section of the assembly descriptor
phases share common logic in terms of how they interact with the Archiver instance; this is captured in different ArchiverTask implementations
ArchiverTask (org.apache.maven.plugin.assembly.archive.task)
Default Implementations:
AddArtifactTask
AddDependencySetsTask
AddDirectoryTask
AddFileSetsTask
Uses:
DependencyResolver (AddDependencySetsTask)
FileSetFormatter (AddFileSetsTask)
Notes:
Used as POJOs that are initialized then executed by different ArchiverAssemblyPhase instances.
ContainerDescriptorHandler (org.apache.maven.plugin.assembly.filter)
Notes:
Added to the AssemblyProxyArchiver as a filter and finalizer
Ability to cherry-pick files before they're added to the assembly archive, and process them (processing usually means aggregation/merging, but could be anything)
Ability to add a set of "virtual" files to the assembly archive just before it is closed.
ComponentsXmlArchiveFileFilter (for plexus components.xml files) is always present during the assembly process.
DependencyResolver (org.apache.maven.plugin.assembly.artifact)
Uses:
ArtifactFactory from maven-artifact
ArtifactRepository from maven-artifact
MavenProjectBuilder from maven-project
ArtifactResolver from maven-artifact
MavenMetadataSource/ArtifactMetadataSource from maven-project/maven-artifact
Notes:
Selects the best implementation of ArtifactResolver it can find, based on a String-array of preferential role-hints. If none of the preferred resolvers can be found, it defaults to a lookup without any role-hint. This is necessary for compatibility with maven 2.0.x.
This component can take a List of remote repositories from the current build, append to this the List of remote repositories from the project passed in (avoiding duplicate entries, based on repository id), and use that as a basis for resolving dependency artifacts
AssemblyConfigurationSource.isUseTransitiveDependencies() is used in calling components to control whether this component (the resolver) does a full transitive resolution of the project's dependencies, or just resolves the direct dependency artifacts
FileFormatter (org.apache.maven.plugin.assembly.format)
Uses:
AssemblyFileUtils for line-ending normalization and temp-dir/temp-file management
Provides:
Interpolation of a given file's contents, based on project values and an optional Properties file or set of filter files (supplied by AssemblyConfigurationSource)
Normalization of line endings, using values: keep (don't change), dos (\r\n), crlf (\r\n), unix (\n), lf (\n)
Notes:
If line ending is not 'keep', the final line in the file will always end with a newline string, regardless of whether this is the case in the original file. See MASSEMBLY-96.