如何让maven使用JNLP版本命名约定?
我的任务是减少一个webstart应用程序的下载量。我认为下载的相当一部分是从一个较大的jar文件库中获得的,而且由于我们很少更新其中的许多文件,因此使用该工具似乎可以显著减少下载量。当新版本的应用程序发布时,这将停止持续重新下载相同的JAR 现在,该项目是用maven构建的。该过程的一部分是从velocity模板自动生成JNLP文件。JNLP文件的resources部分由maven传入的$dependencies变量填充,如下所示:如何让maven使用JNLP版本命名约定?,maven,java-web-start,jnlp,maven-webstart-plugin,Maven,Java Web Start,Jnlp,Maven Webstart Plugin,我的任务是减少一个webstart应用程序的下载量。我认为下载的相当一部分是从一个较大的jar文件库中获得的,而且由于我们很少更新其中的许多文件,因此使用该工具似乎可以显著减少下载量。当新版本的应用程序发布时,这将停止持续重新下载相同的JAR 现在,该项目是用maven构建的。该过程的一部分是从velocity模板自动生成JNLP文件。JNLP文件的resources部分由maven传入的$dependencies变量填充,如下所示: <jar href="lib/mainjar-0.1.
<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命名约定呢
我可以更改velocity模板来剪切$dependencies变量并将其与JNLP约定重新组合,但这只是我需要的一半,因为实际的jar名称也需要更改。版本下载协议文章是关于加快检查资源是否是最新的。尽管它可能也很有用,但它并不是阻止重新下载相同文件的部分 Webstart maven插件可以为您管理JAR的版本控制,它们声明它们也使用版本协议。看 我的个人经历和医生说的不一样。它在生成的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>
谢谢你对这个老问题的意见!我会接受你的答案,因为这似乎是合乎逻辑的-但不幸的是,我不再与maven或web start合作,因此无法真正给出正确的反馈,说明这对我到底有多大帮助。希望它能帮助别人!
<jar href="commons-collections.jar" version="3.2.1"/>
commons-collections-3.2.1.jar