Java Webstart(库)签名

3

我对我们目前的构建过程有些担忧。它似乎存在“错误的方式”,并且会导致客户需要下载很多额外的内容。

我们有一个普通的Java项目,通过Webstart发布。它使用了一系列库,我们将其作为.jar文件提供。我们的JNLP文件如下:

<resources>
    <!-- Application Resources -->
    <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se" max-heap-size="512m" java-vm-args="-Xincgc" />
    <jar href="OurApp.jar" main="true" />
    <jar href="nimrodlf-1.2.jar" main="false" />
    <jar href="jackson-core-asl-1.9.10.jar" main="false" />
    <jar href="jackson-jaxrs-1.9.10.jar" main="false" />
    <!-- ... -->

到目前为止一切都很好。现在使用由不同证书签名的JAR存在问题,我猜可能只有当其中一个是自签名证书时才会出现这种情况。无论如何,找到的解决方案是所有JAR都必须使用相同的证书进行签名。

随后,我们将所有JAR(包括我们自己的和库文件)复制到Webstart文件夹中,并使用Ant进行签名:

<target name="sign_jar" depends="check_publish">
    <signjar keystore="ourapp.keystore" alias="jenkins" storepass="private" verbose="true">
        <path>
            <fileset dir="${publish.folder}/" includes="**/*.jar" />
        </path>
    </signjar>
</target>

这一切都很好,尽管签署每个jar文件需要很长时间。但是,每次我们发布对自己应用程序jar的更改时,它也会导致每个客户端重新下载每个库jar(这很多)。虽然库本质上没有变化,但重新签名使它们看起来是新的。

我们做得对吗?有更好的方法吗?我们能否改变我们的构建过程,使人们可以缓存库jar?


谢谢,我已将其添加为标签。我们实际上没有专门负责构建流程的人,所以我们对此的理解都有些模糊;) - Torque
评论已升级为回答。 :) - Andrew Thompson
1个回答

2

请参阅signjar任务-lazy属性。

此标志用于控制签名文件的存在是否意味着JAR已签名。仅在目标JAR与源JAR匹配时使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接