configure Maven Shade minimizeJar to include class files

后端 未结 2 483
北恋
北恋 2020-12-05 06:08

I am trying to minimize the UberJar\'s size by using Maven Shade Plugin\'s minimizeJar. It looks like minimizeJar only includes class

相关标签:
2条回答
  • 2020-12-05 06:17

    This functionality has been added to version 1.6 of the maven-shade-plugin (just released). minimizeJar will now not remove classes that have been specifically included with filters. Note that including some of an artifact's classes in a filter will exclude non-specified classes for that artifact, so be sure to include all the classes that you need.

    Here's an example plugin config:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.6</version>    
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>                        
                <configuration>
                    <minimizeJar>true</minimizeJar>    
                    <filters> 
                        <filter>
                           <artifact>log4j:log4j</artifact>
                           <includes>
                               <include>**</include>
                           </includes>
                        </filter> 
                        <filter>
                           <artifact>commons-logging:commons-logging</artifact>
                           <includes>
                               <include>**</include>
                           </includes>
                        </filter>                      
                    </filters>
                </configuration>
            </execution>
        </executions>
    </plugin>
    
    0 讨论(0)
  • 2020-12-05 06:17

    I am using the 2.0 version of the Maven Shade Plugin and still I am not able to include classes after "minimizing" the JAR.

    As a workaround the only thing that comes to my mind is to create references to the needed classes to avoid the minimization code to get rid of them. ie:

    /*
     * This block prevents the Maven Shade plugin to remove the specified classes
     */
    static {
        @SuppressWarnings ("unused") Class<?>[] classes = new Class<?>[] {
            JButton.class,
            JMenu.class,
            JMenuBar.class,
            JMenuItem.class
        };
    }
    

    I hope Maven developers implement a way to handle this situation (which I guess is very common).

    0 讨论(0)
提交回复
热议问题