in src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java [451:664]
public void execute() throws MojoExecutionException {
if (skip) {
getLog().info("Shading has been skipped.");
return;
}
setupHintedShader();
Set<File> artifacts = new LinkedHashSet<>();
Set<String> artifactIds = new LinkedHashSet<>();
Set<File> sourceArtifacts = new LinkedHashSet<>();
Set<File> testArtifacts = new LinkedHashSet<>();
Set<File> testSourceArtifacts = new LinkedHashSet<>();
ArtifactSelector artifactSelector = new ArtifactSelector(project.getArtifact(), artifactSet, shadedGroupFilter);
if (artifactSelector.isSelected(project.getArtifact())
&& !"pom".equals(project.getArtifact().getType())) {
if (invalidMainArtifact()) {
createErrorOutput();
throw new MojoExecutionException(
"Failed to create shaded artifact, " + "project main artifact does not exist.");
}
artifacts.add(project.getArtifact().getFile());
if (extraJars != null && !extraJars.isEmpty()) {
for (File extraJar : extraJars) {
if (!Files.isRegularFile(extraJar.toPath())) {
throw new MojoExecutionException(
"Failed to create shaded artifact: parameter extraJars contains path " + extraJar
+ " that is not a file (does not exist or is not a file)");
}
artifacts.add(extraJar);
}
}
if (createSourcesJar) {
File file = shadedSourcesArtifactFile();
if (file.isFile()) {
sourceArtifacts.add(file);
}
}
if (shadeTestJar) {
File file = shadedTestArtifactFile();
if (file.isFile()) {
testArtifacts.add(file);
}
}
if (createTestSourcesJar) {
File file = shadedTestSourcesArtifactFile();
if (file.isFile()) {
testSourceArtifacts.add(file);
}
}
}
processArtifactSelectors(
artifacts, artifactIds, sourceArtifacts, testArtifacts, testSourceArtifacts, artifactSelector);
File outputJar = (outputFile != null) ? outputFile : shadedArtifactFileWithClassifier();
File sourcesJar = shadedSourceArtifactFileWithClassifier();
File testJar = shadedTestArtifactFileWithClassifier();
File testSourcesJar = shadedTestSourceArtifactFileWithClassifier();
// Now add our extra resources
try {
List<Filter> filters = getFilters();
List<Relocator> relocators = getRelocators();
List<ResourceTransformer> resourceTransformers = getResourceTransformers();
if (createDependencyReducedPom) {
createDependencyReducedPom(artifactIds);
if (useDependencyReducedPomInJar) {
// In some cases the used implementation of the resourceTransformers is immutable.
resourceTransformers = new ArrayList<>(resourceTransformers);
resourceTransformers.addAll(createPomReplaceTransformers(project, dependencyReducedPomLocation));
}
}
ShadeRequest shadeRequest =
shadeRequest("jar", artifacts, outputJar, filters, relocators, resourceTransformers);
shader.shade(shadeRequest);
if (createSourcesJar) {
ShadeRequest shadeSourcesRequest = createShadeSourcesRequest(
"sources-jar", sourceArtifacts, sourcesJar, filters, relocators, resourceTransformers);
shader.shade(shadeSourcesRequest);
}
if (shadeTestJar) {
ShadeRequest shadeTestRequest =
shadeRequest("test-jar", testArtifacts, testJar, filters, relocators, resourceTransformers);
shader.shade(shadeTestRequest);
}
if (createTestSourcesJar) {
ShadeRequest shadeTestSourcesRequest = createShadeSourcesRequest(
"test-sources-jar",
testSourceArtifacts,
testSourcesJar,
filters,
relocators,
resourceTransformers);
shader.shade(shadeTestSourcesRequest);
}
if (outputFile == null) {
boolean renamed = false;
// rename the output file if a specific finalName is set
// but don't rename if the finalName is the <build><finalName>
// because this will be handled implicitly later
if (finalName != null
&& finalName.length() > 0 //
&& !finalName.equals(project.getBuild().getFinalName())) {
String finalFileName = finalName + "."
+ project.getArtifact().getArtifactHandler().getExtension();
File finalFile = new File(outputDirectory, finalFileName);
replaceFile(finalFile, outputJar);
outputJar = finalFile;
// Also support the sources JAR
if (createSourcesJar) {
finalFileName = finalName + "-sources.jar";
finalFile = new File(outputDirectory, finalFileName);
replaceFile(finalFile, sourcesJar);
sourcesJar = finalFile;
}
// Also support the test JAR
if (shadeTestJar) {
finalFileName = finalName + "-tests.jar";
finalFile = new File(outputDirectory, finalFileName);
replaceFile(finalFile, testJar);
testJar = finalFile;
}
if (createTestSourcesJar) {
finalFileName = finalName + "-test-sources.jar";
finalFile = new File(outputDirectory, finalFileName);
replaceFile(finalFile, testSourcesJar);
testSourcesJar = finalFile;
}
renamed = true;
}
if (shadedArtifactAttached) {
getLog().info("Attaching shaded artifact.");
projectHelper.attachArtifact(
project, project.getArtifact().getType(), shadedClassifierName, outputJar);
if (createSourcesJar) {
projectHelper.attachArtifact(
project, "java-source", shadedClassifierName + "-sources", sourcesJar);
}
if (shadeTestJar) {
projectHelper.attachArtifact(project, "test-jar", shadedClassifierName + "-tests", testJar);
}
if (createTestSourcesJar) {
projectHelper.attachArtifact(
project, "java-source", shadedClassifierName + "-test-sources", testSourcesJar);
}
} else if (!renamed) {
getLog().info("Replacing original artifact with shaded artifact.");
File originalArtifact = project.getArtifact().getFile();
if (originalArtifact != null) {
replaceFile(originalArtifact, outputJar);
if (createSourcesJar) {
getLog().info("Replacing original source artifact with shaded source artifact.");
File shadedSources = shadedSourcesArtifactFile();
replaceFile(shadedSources, sourcesJar);
projectHelper.attachArtifact(project, "java-source", "sources", shadedSources);
}
if (shadeTestJar) {
getLog().info("Replacing original test artifact with shaded test artifact.");
File shadedTests = shadedTestArtifactFile();
replaceFile(shadedTests, testJar);
projectHelper.attachArtifact(project, "test-jar", shadedTests);
}
if (createTestSourcesJar) {
getLog().info("Replacing original test source artifact "
+ "with shaded test source artifact.");
File shadedTestSources = shadedTestSourcesArtifactFile();
replaceFile(shadedTestSources, testSourcesJar);
projectHelper.attachArtifact(project, "java-source", "test-sources", shadedTestSources);
}
}
}
}
} catch (Exception e) {
throw new MojoExecutionException("Error creating shaded jar: " + e.getMessage(), e);
}
}