1

我的任务是减少我们的一个 webstart 应用程序的下载大小。我认为下载的相当一部分来自所有大型 jar 文件库,并且由于我们很少更新其中的许多文件,因此使用JNLP 版本下载协议似乎会显着减少下载量。当应用程序的新版本发布时,这应该会停止继续重新下载相同的 jar。

现在,该项目是用 maven 构建的。该过程的一部分是从速度模板自动生成 JNLP 文件。JNLP 文件的资源部分由假定由 maven 传入的 $dependencies 变量填充,看起来像这样:

<jar href="lib/mainjar-0.1.40-SNAPSHOT.jar" main="true"/>
<jar href="lib/somejar-1.1.jar"/>
<jar href="lib/someotherjar-1.0.jar"/>
<jar href="lib/anotherjar-1.6.0.jar"/>
 etc...

在我看来,maven 正在使用其标准命名约定,并从项目 pom 文件中的 artifactId 和版本标签构建 jar 名称。

我怎样才能让它使用 JNLP 命名约定呢?

我可以更改速度模板以削减 $dependencies 变量并将其与 JNLP 约定重新组合 - 但这只是我需要的一半,因为实际的 jar 名称也需要更改。

4

1 回答 1

0

版本下载协议文章是关于加快检查资源是否为最新的。尽管它也可能有用,但它并不是阻止重新下载相同文件的部分。

Webstart-maven-plugin 可以为您处理 jar 的版本控制,并且他们声明它们也使用版本协议。见http://www.mojohaus.org/webstart/webstart-maven-plugin/jnlp-mojo.html#outputJarVersions

我的个人经历与文档所说的不同。它在生成的 jnlp 中添加了 jar 的 version 属性,并且没有设置jnlp.versionEnabled属性,这似乎是版本下载协议所必需的。无论哪种方式,JWS 都能像我预期的那样工作——当文件的版本没有改变时,不会重新下载文件。

插件设置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>webstart-maven-plugin</artifactId>
    <version>1.0-beta-6</version>
    <dependencies>
        <!--This dependency definition resolves class loading issue on Java 8 -->
        <dependency>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>keytool-api-1.7</artifactId>
            <version>1.4</version>
        </dependency>
    </dependencies>

    <executions>
        <execution>
            <phase>process-resources</phase>
            <goals>
                <goal>jnlp-download-servlet</goal>
            </goals>
        </execution>
    </executions>

    <configuration>
        <outputDirectoryName>/</outputDirectoryName>
        <libPath/>

        <sign>
            <keystore>${basedir}/foo-key-store.jks</keystore>
            <storepass>password</storepass>
            <alias>foo-self-signed</alias>
            <verify>true</verify>
        </sign>
        <unsign>true</unsign>

        <jnlpFiles>
            <jnlpFile>
                <inputTemplate>template.vm</inputTemplate>
                <outputFilename>foo.jnlp</outputFilename>

                <jarResources>
                    <jarResource>
                        <groupId>foo.bar</groupId>
                        <artifactId>foo</artifactId>
                        <version>${project.version}</version>
                        <mainClass>foo.bar.Foo</mainClass>
                        <outputJarVersion>false</outputJarVersion>
                    </jarResource>
                </jarResources>
            </jnlpFile>
        </jnlpFiles>

        <gzip>true</gzip>
    </configuration>
</plugin>

生成的 foo.jnlp 的摘录显示了依赖项的版本属性:

<jar href="commons-collections.jar" version="3.2.1"/>

它引用的文件名为:

commons-collections-3.2.1.jar
于 2016-06-01T07:13:05.623 回答