当前位置: 首页 > 面试题库 >

使用Shade-Plugin将Uber Jar正确最小化

水睿
2023-03-14
问题内容

我正在使用Maven-Shade-Plugin创建可运行的Uber
jar。根据本页上的最后一帧,可以使用以下方法将罐子的大小最小化:

<configuration>
      <minimizeJar>true</minimizeJar>
</configuration>

但是,此功能未考虑log4j.properties文件中声明的类。因此,例如org.apache.log4j.appender.TimeAndSizeRollingAppender,即使在log4j.properties文件中声明了它,也不包含在Uber-
jar中。

我相信我将在Spring面临同样的问题。如果我的代码仅引用接口A,并且我的Spring文件包含实现A的类B的实例化,则B可能不会添加到jar中,因为它不在代码中。

我怎么解决这个问题?


问题答案:

此功能已添加到maven-shade-
plugin的1.6版中(刚刚发布)。minimalJar现在将不会删除过滤器专门包含的类。请注意,在过滤器中包含工件的某些类将排除该工件的未指定类,因此请确保包括所需的所有类。

这是一个示例插件配置:

<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>

要仅包括特定的类,请在过滤器的类名中使用路径斜杠将它们添加为包括在内(同样,将自动排除不包括的类)。

<filter>
  <artifact>org.yourorg:your-artifact</artifact>
  <includes>
    <include>org/yourorg/yourartifact/api/*</include>
    <include>org/yourorg/yourartifact/util/*</include>
  </includes>
</filter>


 类似资料:
  • 我正在使用maven-shade-plugin在构建的包阶段重新定位一些包。我还使用maven-bundle-plugin生成一个清单。问题是bundle插件在shade插件之前运行(在过程类阶段),并且在生成的清单的导出中没有包含任何我的shade包。 -- 根据要求,我的POM的阴影和捆绑部分: 从这里取的

  • 我有一个项目,它使用maven-assembly-plugin打包了几个(可执行的jar)程序集--基本上相同的代码,但针对不同的客户机使用了不同的数据集。 我需要在可执行jar中使用spring,由于spring中的文件命名,我需要使用maven-shade-plugin创建jar。这工作很好,我可以创建可执行的jar,但我不能确定如何将我的其他文件组装到这个新的shaded jar,因为sha

  • Maven shade plugin 为 Maven 提供了 Jar 打包的神器,包括将所依赖的 jar 包都打包到一起。

  • 问题内容: 我是Gradle新手。我想构建一个uberjar(AKA fatjar),其中包括项目的所有传递依赖项。我需要在“ build.gradle”中添加哪些行? 这是我目前拥有的:(我是从几天前的某个地方复制的,但是不要从那里收集。) 问题答案: 您是否尝试过 gradle食谱中 的fatjar示例? 您正在寻找的是gradle 的影子插件

  • 想法? 谢了。

  • 我试图使用一个GridBagLayout有一个JFrame,其中包含一个具有网格布局的JPanel和一个只有一个大按钮的JPanel。我希望所有的行都是相同的大小,并且带有JButton的JPanel与一行的大小相同。然而,按钮面板目前是空的,大约是JFrame的1/3。我不太确定发生了什么,但是维护这个结构对我来说非常重要,因为我的代码的其余部分都使用了这个结构。任何帮助都很感激,并提前感谢您。