【问题标题】:reducing SWT cross-platform jar size减少 SWT 跨平台 jar 大小
【发布时间】:2012-07-30 18:09:53
【问题描述】:

我已经使用我在Create cross platform Java SWT Application上找到的清晰解释制作了一个跨平台的 SWT jar

不过,这需要我打包每个平台的 jar 以使其独立于系统,使 jar 的总大小约为 40MB。对于进行一些解析的项目来说,这有点疯狂。

我曾尝试使用 ProGuard 来减小文件大小,但这并不是很有用。我是否可以由此得出结论,原则上不可能使用 SWT 创建小型跨平台应用程序?

【问题讨论】:

标签: java file size swt


【解决方案1】:

好吧,您可以让您的程序不包含 SWT jar,并在安装或第一次运行时下载正确的 jar。可能不是一个好主意,但可能。否则,我只会在这种情况下使用 Swing。

【讨论】:

  • 谢谢,但是使用 Swing 相当困难,因为我的整个项目都是使用 SWT 制作的...我现在能够将包缩小到 10 mb 左右,因为 SWT 包含许多我没有的包不需要。不过,我认为这太大了:-)
【解决方案2】:

可以将所有所需平台之间通用的类文件提取到单独的 jar 中。然后从平台特定的 jar 中删除这些通用类。

在运行时,您将公共 jar 和平台特定 jar 添加到 URLClassLoader。

为我工作。

这是我用来重新打包 jar 的旧 shell 脚本,我希望它可以工作:

#!/bin/bash

ref=""
for jar in *.jar ; do
    base="${jar%%.jar}"
    mkdir "$base"
    ( cd "$base" ; unzip -o ../${jar} ;)
    ref="$base"
done

mkdir common
echo "Base is ${ref}"

( cd "$ref" ; find . -type f ) | while read f ; do
    fd5=`cat "${ref}/${f}" | md5sum`
    echo "Processing ${f}..."
    same="yes"
    for jar in *.jar ; do
        if [[ "x${same}" == "xyes" ]] ; then
            base="${jar%%.jar}"
            if [[ -f "${base}/${f}" ]] ; then
                fd5b=`cat "${base}/${f}" | md5sum `
                if [[ "x${fd5}" == "x${fd5b}" ]] ; then
                    echo " - same ${fd5} == ${fd5b} in ${base}"
                else
                    echo " - different ${fd5} != ${fd5b} in ${base}"
                    same="no"
                fi
            else
                echo " - missing in ${base}"
                same="no"
            fi
        fi
    done
    if [[ "x${same}" == "xyes" ]] ; then
        echo " - IDENTICAL"
        d=`dirname "${f}"`
        mkdir -p "common/${d}"
        cp "${ref}/${f}" "common/${f}"
        for jar in *.jar ; do
            base="${jar%%.jar}"
            rm "${base}/${f}"
        done
    else
        echo " - DIFFERENT"
    fi
done

mkdir jars
( cd "common" ; jar -cvf "../jars/common.jar" * ; )
for jar in *.jar ; do
    base="${jar%%.jar}"
    ( cd "$base" ; jar -cvfm "../jars/${jar}" META-INF/MANIFEST.MF * ; )
done

SWT 4.3 版生成的 jar 大小为:

swt_common.jar 521865
swt_linux_x64.jar 1373413
swt_linux_x86.jar 1222447
swt_macosx_x64.jar 1416943
swt_macosx_x86.jar 1514651
swt_win32_x64.jar 1434927
swt_win32_x86.jar 1421738

还要记住,为 MacOS 做一个 click-jar-to-run 风格的 SWT 应用程序是很棘手的(-XstartOnFirstThread 选项问题)。所以你可能会考虑移除 MacOS 平台。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多