@Mojo(name="shade",
defaultPhase=PACKAGE,
threadSafe=true,
requiresDependencyResolution=RUNTIME)
public class ShadeMojo
extends org.apache.maven.plugin.AbstractMojo
implements org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable
Modifier and Type | Field and Description |
---|---|
protected org.apache.maven.shared.artifact.resolve.ArtifactResolver |
artifactResolver
Artifact resolver, needed to download source jars for inclusion in classpath.
|
private ArtifactSet |
artifactSet
Artifacts to include/exclude from the final artifact.
|
private boolean |
createDependencyReducedPom
Flag whether to generate a simplified POM for the shaded artifact.
|
private boolean |
createSourcesJar
When true, it will attempt to create a sources jar as well
|
private org.apache.maven.shared.dependency.graph.DependencyGraphBuilder |
dependencyGraphBuilder
The dependency graph builder to use.
|
private java.io.File |
dependencyReducedPomLocation
Where to put the dependency reduced pom.
|
private ArchiveFilter[] |
filters
Archive Filters to be used.
|
private java.lang.String |
finalName
The name of the shaded artifactId.
|
private boolean |
generateUniqueDependencyReducedPom
Create a dependency-reduced POM in ${basedir}/drp-UNIQUE.pom.
|
private boolean |
keepDependenciesWithProvidedScope
When true, dependencies are kept in the pom but with scope 'provided'; when false, the dependency is removed.
|
protected org.apache.maven.artifact.repository.ArtifactRepository |
localRepository
Local maven repository.
|
private boolean |
minimizeJar
When true, dependencies will be stripped down on the class level to only the transitive hull required for the
artifact.
|
private java.io.File |
outputDirectory
The destination directory for the shaded artifact.
|
private java.io.File |
outputFile
The path to the output file for the shaded artifact.
|
private org.codehaus.plexus.PlexusContainer |
plexusContainer |
private org.apache.maven.project.MavenProject |
project
The current Maven project.
|
private org.apache.maven.project.ProjectBuilder |
projectBuilder
ProjectBuilder, needed to create projects from the artifacts.
|
private org.apache.maven.project.MavenProjectHelper |
projectHelper |
private boolean |
promoteTransitiveDependencies
When true, transitive deps of removed dependencies are promoted to direct dependencies.
|
private PackageRelocation[] |
relocations
Packages to be relocated.
|
protected java.util.List<org.apache.maven.artifact.repository.ArtifactRepository> |
remoteArtifactRepositories
Remote repositories which will be searched for source attachments.
|
private org.apache.maven.execution.MavenSession |
session
The current Maven session.
|
private boolean |
shadedArtifactAttached
Defines whether the shaded artifact should be attached as classifier to the original artifact.
|
private java.lang.String |
shadedArtifactId
The name of the shaded artifactId.
|
private java.lang.String |
shadedClassifierName
The name of the classifier used in case the shaded artifact is attached.
|
private java.lang.String |
shadedGroupFilter
If specified, this will include only artifacts which have groupIds which start with this.
|
private Shader |
shader |
private java.lang.String |
shaderHint
You can pass here the roleHint about your own Shader implementation plexus component.
|
private boolean |
shadeSourcesContent
When true, it will attempt to shade the contents of the java source files when creating the sources jar.
|
private boolean |
shadeTestJar |
private ResourceTransformer[] |
transformers
Resource transformers to be used.
|
private boolean |
useBaseVersion
When true, the version of each dependency of the reduced pom will be based on the baseVersion of the original
dependency instead of its resolved version.
|
Constructor and Description |
---|
ShadeMojo() |
Modifier and Type | Method and Description |
---|---|
private void |
addSystemScopedDependencyFromNonInterpolatedPom(java.util.List<org.apache.maven.model.Dependency> dependencies,
java.util.List<org.apache.maven.model.Dependency> originalDependencies) |
void |
contextualize(org.codehaus.plexus.context.Context context) |
private void |
copyFiles(java.io.File source,
java.io.File target) |
private org.apache.maven.model.Dependency |
createDependency(org.apache.maven.artifact.Artifact artifact) |
private void |
createDependencyReducedPom(java.util.Set<java.lang.String> artifactsToRemove) |
private void |
createErrorOutput() |
private ShadeRequest |
createShadeSourcesRequest(java.util.Set<java.io.File> testArtifacts,
java.io.File testJar,
java.util.List<Filter> filters,
java.util.List<Relocator> relocators,
java.util.List<ResourceTransformer> resourceTransformers) |
void |
execute() |
private java.util.List<Filter> |
getFilters() |
private java.lang.String |
getId(org.apache.maven.artifact.Artifact artifact) |
private java.lang.String |
getId(org.apache.maven.model.Dependency dependency) |
private java.lang.String |
getId(java.lang.String groupId,
java.lang.String artifactId,
java.lang.String type,
java.lang.String classifier) |
private java.util.List<Relocator> |
getRelocators() |
private java.util.List<ResourceTransformer> |
getResourceTransformers() |
private boolean |
invalidMainArtifact() |
private void |
processArtifactSelectors(java.util.Set<java.io.File> artifacts,
java.util.Set<java.lang.String> artifactIds,
java.util.Set<java.io.File> sourceArtifacts,
ArtifactSelector artifactSelector) |
private void |
removeSystemScopedDependencies(java.util.Set<java.lang.String> artifactsToRemove,
java.util.List<org.apache.maven.model.Dependency> originalDependencies) |
private void |
replaceFile(java.io.File oldFile,
java.io.File newFile) |
private java.io.File |
resolveArtifactSources(org.apache.maven.artifact.Artifact artifact) |
private void |
rewriteDependencyReducedPomIfWeHaveReduction(java.util.List<org.apache.maven.model.Dependency> dependencies,
boolean modified,
java.util.List<org.apache.maven.model.Dependency> transitiveDeps,
org.apache.maven.model.Model model) |
private void |
setupHintedShader() |
private java.io.File |
shadedArtifactFileWithClassifier() |
private java.io.File |
shadedSourceArtifactFileWithClassifier() |
private java.io.File |
shadedSourcesArtifactFile() |
private java.io.File |
shadedTestArtifactFile() |
private java.io.File |
shadedTestArtifactFileWithClassifier() |
private ShadeRequest |
shadeRequest(java.util.Set<java.io.File> artifacts,
java.io.File outputJar,
java.util.List<Filter> filters,
java.util.List<Relocator> relocators,
java.util.List<ResourceTransformer> resourceTransformers) |
boolean |
updateExcludesInDeps(org.apache.maven.project.MavenProject project,
java.util.List<org.apache.maven.model.Dependency> dependencies,
java.util.List<org.apache.maven.model.Dependency> transitiveDeps) |
@Parameter(defaultValue="${session}", readonly=true, required=true) private org.apache.maven.execution.MavenSession session
@Parameter(defaultValue="${project}", readonly=true, required=true) private org.apache.maven.project.MavenProject project
@Component private org.apache.maven.project.MavenProjectHelper projectHelper
@Component(hint="default", role=Shader.class) private Shader shader
@Component private org.apache.maven.shared.dependency.graph.DependencyGraphBuilder dependencyGraphBuilder
@Component private org.apache.maven.project.ProjectBuilder projectBuilder
@Parameter(readonly=true, required=true, defaultValue="${project.remoteArtifactRepositories}") protected java.util.List<org.apache.maven.artifact.repository.ArtifactRepository> remoteArtifactRepositories
@Parameter(readonly=true, required=true, defaultValue="${localRepository}") protected org.apache.maven.artifact.repository.ArtifactRepository localRepository
@Component protected org.apache.maven.shared.artifact.resolve.ArtifactResolver artifactResolver
@Parameter private ArtifactSet artifactSet
groupId:artifactId:type:classifier
. Since version 1.3, the wildcard characters '*' and
'?' can be used within the sub parts of those composite identifiers to do pattern matching. For convenience, the
syntax groupId
is equivalent to groupId:*:*:*
, groupId:artifactId
is
equivalent to groupId:artifactId:*:*
and groupId:artifactId:classifier
is equivalent to
groupId:artifactId:*:classifier
. For example:
<artifactSet> <includes> <include>org.apache.maven:*</include> </includes> <excludes> <exclude>*:maven-core</exclude> </excludes> </artifactSet>
@Parameter private PackageRelocation[] relocations
<relocations> <relocation> <pattern>org.apache</pattern> <shadedPattern>hidden.org.apache</shadedPattern> <includes> <include>org.apache.maven.*</include> </includes> <excludes> <exclude>org.apache.maven.Public*</exclude> </excludes> </relocation> </relocations>Note: Support for includes exists only since version 1.4.
@Parameter private ResourceTransformer[] transformers
@Parameter private ArchiveFilter[] filters
artifactSet
and a set of include/exclude file patterns for filtering which contents of the archive are
added to the shaded jar. From a logical perspective, includes are processed before excludes, thus it's possible
to use an include to collect a set of files from the archive then use excludes to further reduce the set. By
default, all files are included and no files are excluded. If multiple filters apply to an artifact, the
intersection of the matched files will be included in the final JAR. For example:
<filters> <filter> <artifact>junit:junit</artifact> <includes> <include>org/junit/**</include> </includes> <excludes> <exclude>org/junit/experimental/**</exclude> </excludes> </filter> </filters>
@Parameter(defaultValue="${project.build.directory}") private java.io.File outputDirectory
@Parameter private java.lang.String finalName
@Parameter(defaultValue="${project.artifactId}") private java.lang.String shadedArtifactId
@Parameter private java.lang.String shadedGroupFilter
@Parameter private boolean shadedArtifactAttached
@Parameter(defaultValue="true") private boolean createDependencyReducedPom
true
, dependencies that
have been included into the uber JAR will be removed from the <dependencies>
section of the
generated POM. The reduced POM will be named dependency-reduced-pom.xml
and is stored into the same
directory as the shaded artifact. Unless you also specify dependencyReducedPomLocation, the plugin will create a
temporary file named dependency-reduced-pom.xml
in the project basedir.@Parameter(defaultValue="${basedir}/dependency-reduced-pom.xml") private java.io.File dependencyReducedPomLocation
@Parameter(defaultValue="false") private boolean generateUniqueDependencyReducedPom
@Parameter private boolean keepDependenciesWithProvidedScope
@Parameter private boolean promoteTransitiveDependencies
@Parameter(defaultValue="shaded") private java.lang.String shadedClassifierName
@Parameter private boolean createSourcesJar
@Parameter(property="shadeSourcesContent", defaultValue="false") private boolean shadeSourcesContent
@Parameter private boolean minimizeJar
@Parameter private java.io.File outputFile
finalName
, shadedArtifactAttached
, shadedClassifierName
and
createDependencyReducedPom
to be ignored when used.@Parameter private java.lang.String shaderHint
@Parameter(defaultValue="false") private boolean useBaseVersion
@Parameter(defaultValue="false") private boolean shadeTestJar
private org.codehaus.plexus.PlexusContainer plexusContainer
public void contextualize(org.codehaus.plexus.context.Context context) throws org.codehaus.plexus.context.ContextException
contextualize
in interface org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable
org.codehaus.plexus.context.ContextException
public void execute() throws org.apache.maven.plugin.MojoExecutionException
execute
in interface org.apache.maven.plugin.Mojo
org.apache.maven.plugin.MojoExecutionException
private void createErrorOutput()
private ShadeRequest shadeRequest(java.util.Set<java.io.File> artifacts, java.io.File outputJar, java.util.List<Filter> filters, java.util.List<Relocator> relocators, java.util.List<ResourceTransformer> resourceTransformers)
private ShadeRequest createShadeSourcesRequest(java.util.Set<java.io.File> testArtifacts, java.io.File testJar, java.util.List<Filter> filters, java.util.List<Relocator> relocators, java.util.List<ResourceTransformer> resourceTransformers)
private void setupHintedShader() throws org.apache.maven.plugin.MojoExecutionException
org.apache.maven.plugin.MojoExecutionException
private void processArtifactSelectors(java.util.Set<java.io.File> artifacts, java.util.Set<java.lang.String> artifactIds, java.util.Set<java.io.File> sourceArtifacts, ArtifactSelector artifactSelector)
private boolean invalidMainArtifact()
private void replaceFile(java.io.File oldFile, java.io.File newFile) throws org.apache.maven.plugin.MojoExecutionException
org.apache.maven.plugin.MojoExecutionException
private void copyFiles(java.io.File source, java.io.File target) throws java.io.IOException
java.io.IOException
private java.io.File resolveArtifactSources(org.apache.maven.artifact.Artifact artifact)
private java.util.List<Relocator> getRelocators()
private java.util.List<ResourceTransformer> getResourceTransformers()
private java.util.List<Filter> getFilters() throws org.apache.maven.plugin.MojoExecutionException
org.apache.maven.plugin.MojoExecutionException
private java.io.File shadedArtifactFileWithClassifier()
private java.io.File shadedSourceArtifactFileWithClassifier()
private java.io.File shadedTestArtifactFileWithClassifier()
private java.io.File shadedSourcesArtifactFile()
private java.io.File shadedTestArtifactFile()
private void createDependencyReducedPom(java.util.Set<java.lang.String> artifactsToRemove) throws java.io.IOException, org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException, org.apache.maven.project.ProjectBuildingException
java.io.IOException
org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException
org.apache.maven.project.ProjectBuildingException
private void rewriteDependencyReducedPomIfWeHaveReduction(java.util.List<org.apache.maven.model.Dependency> dependencies, boolean modified, java.util.List<org.apache.maven.model.Dependency> transitiveDeps, org.apache.maven.model.Model model) throws java.io.IOException, org.apache.maven.project.ProjectBuildingException, org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException
java.io.IOException
org.apache.maven.project.ProjectBuildingException
org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException
private void removeSystemScopedDependencies(java.util.Set<java.lang.String> artifactsToRemove, java.util.List<org.apache.maven.model.Dependency> originalDependencies)
private void addSystemScopedDependencyFromNonInterpolatedPom(java.util.List<org.apache.maven.model.Dependency> dependencies, java.util.List<org.apache.maven.model.Dependency> originalDependencies)
private org.apache.maven.model.Dependency createDependency(org.apache.maven.artifact.Artifact artifact)
private java.lang.String getId(org.apache.maven.artifact.Artifact artifact)
private java.lang.String getId(org.apache.maven.model.Dependency dependency)
private java.lang.String getId(java.lang.String groupId, java.lang.String artifactId, java.lang.String type, java.lang.String classifier)
public boolean updateExcludesInDeps(org.apache.maven.project.MavenProject project, java.util.List<org.apache.maven.model.Dependency> dependencies, java.util.List<org.apache.maven.model.Dependency> transitiveDeps) throws org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException
org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException