1

ウェブスタート アプリの 1 つのダウンロード サイズを縮小する任務を負っています。ダウンロードのかなりの部分は 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 および version タグから 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.versionEnabled結果のjnlpにjarのバージョン属性を追加し、バージョンダウンロードプロトコルに必要と思われるプロパティを設定しません。いずれにせよ、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 に答える