Maven shade plugin adding dependency-reduced-pom.xml to base directory

JavaMavenMaven Shade-Plugin

Java Problem Overview


The maven shade plugin is creating a file called dependency-reduced-pom.xml and also artifactname-shaded.jar and placing them in the base directory.

Is this a bug? Should be in the target directory. Any workaround?

Java Solutions


Solution 1 - Java

You can avoid having it created by setting createDependencyReducedPom to false.

e.g.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>${maven-shade-plugin.version}</version>
    <configuration>
        <createDependencyReducedPom>false</createDependencyReducedPom>
    </configuration>
    ....
    ....
</plugin>

See more detail from apache

enter image description here

Solution 2 - Java

Based on bmargulies' answer and his comment on Xv.'s answer, I decided to configure the dependency-reduced POM to be output to target/, which is already ignored in my VCS.

To do that, I just added the dependencyReducedPomLocation element to the configuration element of the plugin, i.e.

<configuration>
  <dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml</dependencyReducedPomLocation>
  (...)
</configuration>

Solution 3 - Java

See https://issues.apache.org/jira/browse/MSHADE-121, and also https://issues.apache.org/jira/browse/MSHADE-124.

There is an option to move the d-r-p to elsewhere, but you may not like the consequences.

You are wrong about the -shaded jar, it always ends up in target/ unless you move it elsewhere.

Solution 4 - Java

You could use an old version of the plugin. Version 1.7 of the maven-shade-plugin writes to /target.

Since version 1.7.1, dependency-reduced pom.xml is written to basedir. See the issue MSHADE-124 for some reasons why it was done and what the consequences are. If you try setting dependencyReducedPomLocation, you will likely run into problems generating the site - open issue MSHADE-145.

Solution 5 - Java

the documentation on http://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html is incorrect when it says:

> createDependencyReducedPom boolean - Flag whether to generate a > simplified POM for the shaded artifact. If set to true, dependencies > that have been included into the uber JAR will be removed from the > 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. Default value > is: true.

the dependency-reduced-pom.xml is not stored in the same directory as the shaded artifact (target directory) ... it is in fact generated in the base directory, not target

Solution 6 - Java

To ignore the file you can add it to the ignore directive for your DVCS. For git, a .gitignore file is created with contents:

dependency-reduced-pom.xml

You can also add it to maven-clean-plugin configuration so it's blown away during the clean lifecycle phase: (Below assumes defaults, such as version, are defined in the POMs pluginManagement section.)

        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <configuration>
                        <filesets>
                            <fileset>
                                <directory>.</directory>
                                <includes>
                                    <include>**/dependency-reduced-pom.xml</include>
                                </includes>
                                <followSymlinks>false</followSymlinks>
                            </fileset>
                        </filesets>
                    </configuration>
                </plugin>
            </plugins>
        </build>

Note that the above configuration is additive to the non-customized clean default.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDD.View Question on Stackoverflow
Solution 1 - JavaxvergesView Answer on Stackoverflow
Solution 2 - JavaZoltánView Answer on Stackoverflow
Solution 3 - JavabmarguliesView Answer on Stackoverflow
Solution 4 - JavacanadianveggieView Answer on Stackoverflow
Solution 5 - JavananiteView Answer on Stackoverflow
Solution 6 - JavaingyhereView Answer on Stackoverflow