【问题标题】:How to reduce the size of the uber JAR by architecture - Maven如何通过架构减小 uber JAR 的大小 - Maven
【发布时间】:2020-07-30 19:49:09
【问题描述】:

我有一个问题,希望有人能提供解决方案或解决方法的想法。

这是问题所在:我正在创建一个 JavaFX 应用程序(使用 Eclipse IDE),它具有一些基于 maven pom 文件的依赖项。当我尝试创建一个包含所有依赖项的 uber Jar 时,就会出现此问题。我正在使用 shade maven 插件,但是当它创建 uber JAR 时,它包含来自其他架构的依赖项,如 windows_x86、linux_x86、android、arm,而且列表无穷无尽。

我尝试使用同一个阴影插件中的最小化选项,但它不起作用。我只想包含 macos_x86_64 的依赖项,因为该应用程序目前仅支持 MacOS。我尝试做很多事情来解决这个问题,例如:从零开始创建 pom,删除依赖项,运行 maven 依赖项:分析,将 shade 最小化设置为 true,还有一些但似乎没有任何效果。我还分析了源代码,以确保我没有包含一些可能触发该行为的依赖项,并且没有任何效果。

那么,这里有没有人可以为这里描述的问题提供解决方案?这很疯狂,因为超级 uber Jar 是 1GB,但我的源代码只有 5MB,没有依赖项和资源。我在检查pom的依赖有多大,不大于200MB(考虑依赖的依赖)。

提前感谢您的帮助!

【问题讨论】:

  • 阴影似乎是正确的方法。它是如何失败的?我认为实现起来可能并不简单,但应该可以过滤掉其他架构的二进制文件。你有哪些包含平台相关代码的依赖项?
  • 我用 Capsule 装胖罐子 dig.floatingsun.net/…

标签: java maven javafx optimization executable-jar


【解决方案1】:

前段时间我使用这样的配置:

        <plugin>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.2</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <minimizeJar>true</minimizeJar>
                        <createDependencyReducedPom>false</createDependencyReducedPom>
                        <filters>
                            <filter>
                                <excludeDefaults>false</excludeDefaults>
                                <artifact>*:*</artifact>
                                <includes>
                                    <include>org/glassfish/json/JsonProviderImpl</include>
                                    <include>com/sun/xml/bind/v2/model/nav/ReflectionNavigator</include>
                                    <include>com/sun/**/*</include>
                                    
                                    <include>com/fasterxml/jackson/datatype/jsr310/deser/LocalDateDeserializer</include>
                                    <include>com/fasterxml/jackson/databind/ext/Java7HandlersImpl</include>
                                </includes>
                                <excludes>
                                    <exclude>**/*.md</exclude>
                                    <exclude>**/*.markdown</exclude>
                                    <exclude>**/*.header</exclude>
                                    <exclude>**/*.xml</exclude>
                                    <exclude>**/pom.properties</exclude>
                                    <exclude>**/io.netty.versions.properties</exclude>
                                    <exclude>**/*.args</exclude>
                                    <exclude>**/*.so</exclude> <!-- Change this for other operating systems -->
                                    <exclude>**/*.dylib</exclude> <!-- Change this for other operating systems -->
                                    <exclude>**/*.dll</exclude> <!-- Change this for other operating systems -->
                                    <exclude>**/*.jar</exclude>
                                </excludes>
                            </filter>
                        </filters>
                        <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>${mainClassName}</mainClass>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>           

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2019-06-09
    • 2015-05-22
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多