我想将Pack200实现到现有的JWS应用程序中。但最近在我当地的POC中,我无法使用Pack200文件模拟Jardiff。
例如, 我有2个版本的jar说
1.test__V1.jar
2.test__V2.jar (additional one jar in lib folder)
我能够在两个带有以下URL的jar之间获取带有差异的jar文件(lib文件夹中的另外一个jar)
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
我必须始终使用以下请求网址下载完整文件
http://localhost/app/test.jar.pack.gz?version-id=2¤t-version-id=1
因此,我怀疑Jardiff是否能够支持Pack200(.pack.gz)版本的文件。希望你们能在这里给我一些指导。谢谢:))
答案 0 :(得分:0)
目前我正在研究这个问题,因为我想在my gradle plugin中实施jardiff支持。很可能你正在使用Sun的JnlpDownloadServlet。我看了一下sourcecode。至少上面url的版本不支持pack200 for jardiff文件。
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,则在内容编码标头中进行编码。 JNLP Spec确实解释了详细信息。
webstart客户端确实为jardiff文件实现了pack200,我使用Java 8u31和一些概念证明servlet进行了测试。
我将在servlet和gradle插件中实现该功能。请参阅我的插件的相应github issue以获取状态更新。