我想在我们现有的JWS应用程序中实现Pack200。但是最近在我本地的POC中,我不能用Pack200文件模拟Jardiff。
例如,我有两个版本的jar
1.test__V1.jar
2.test__V2.jar (additional one jar in lib folder)我能够得到的jar文件与差异(额外的一个jar在lib文件夹中)之间的两个jar与以下URL
http://localhost/app/test.jar?version-id=2¤t-version-id=1使用Pack200,我已经根据上述jar文件准备了2个gz文件,如下所示
1.test.jar.pack__V1.pack.gz
2.test.jar.pack__V2.pack.gz我将必须始终下载完整的文件与以下请求URL
http://localhost/app/test.jar.pack.gz?version-id=2¤t-version-id=1因此,我怀疑Jardiff是否能够支持Pack200(.pack.gz)版本的文件。希望你们能在这里给我一些指导。谢谢:)
发布于 2015-03-15 05:35:21
目前我正在研究这一点,因为我想在my gradle plugin中实现对jardiff的支持。您最有可能使用的是来自Sun的JnlpDownloadServlet。我看了一眼是sourcecode。至少上述url上的版本不支持jardiff文件的pack200。
servlet对每个对jar文件的请求执行以下操作:
def (file, mime-type) = find requested file {
if version-id and current-version-id given and jardiff is smaller than file__V${version-id}.jar.pack.gz
-> (jardiff.jar, application/x-java-archive-diff)
else if version-id given
-> (file__V${version-id}.jar, application/java-archive)
else
-> (file.jar, application/java-archive)
}
if file found {
if ${file}.pack.gz exists
return ${file}.pack.gz with $mime-type and content-encoding header pack200-gzip
else if ${file}.gz exists
return ${file}.gz with $mime-type content-encoding header gzip
else
return ${file} without $mime-type content-encoding header
}如果返回的文件是jardiff,或者jar是在mime-type头中编码的。
如果使用pack200,则在content-encoding标头中进行编码。JNLP Spec确实解释了细节。
webstart客户端确实为jardiff文件实现了pack200,我用Java8u31和一些概念验证servlet对其进行了测试。
我将在servlet和gradle插件中实现该功能。请查看我的插件的相应github issue以获取状态更新。
https://stackoverflow.com/questions/15809410
复制相似问题