当前位置: 首页 > 知识库问答 >
问题:

如何让maven使用JNLP版本命名约定?

阳宾实
2023-03-14

我的任务是减少我们的一个webstart应用程序的下载大小。我认为下载的很大一部分来自所有庞大的jar文件库,由于我们很少更新其中的许多文件,使用JNLP版本下载协议,下载量似乎会显著减少。当应用程序的新版本发布时,这应该可以阻止重复下载相同的JAR。

现在,该项目是用Maven构建的。该过程的一部分是从velocity模板自动生成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命名约定呢?

我可以更改velocity模板,将$Dependencies变量向上剪切,并将其与JNLP约定重新组合--但这只是我需要的一半,因为实际的jar名称也需要更改。

共有1个答案

郎成龙
2023-03-14

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

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中摘录,显示依赖项的version属性:

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

它引用的文件名为:

commons-collections-3.2.1.jar
 类似资料:
  • 我是不是遗漏了什么,或者有什么特别的原因不起作用? 谢了!

  • 我尝试在Intellijidea中打开Maven项目。这个项目使用了spark和Scala。当我跑的时候: 则会给出错误: [错误]无法执行目标org.scalastyle:scalastyle-maven-plugin:0.7.0:项目spark-mllib_2.10:scalastyle执行期间失败:您有50个scalastyle冲突 我认为问题出在Maven的版本上。实际上,在Intelli

  • 问题内容: 我想让Maven2为我的应用程序生成.jnlp(webstart配置文件)。 有一个maven-jnlp-plugin,但自Maven 1.1-beta2以来的某个地方已不推荐使用。 有没有更优选的方法来执行此操作,或者我需要自己构建此功能? 问题答案: 还有用于maven2的webstart-maven-plugin

  • 我有一个多模块项目,所有模块都有一个公共的父pom和一个聚合器/构建pom。我试图使用maven版本插件来更新/设置我所有模块的版本,但它一直跳过子模块。 项目布局:-通用/pom.xml(build pom)-通用/Superpom/pom.xml(父pom)-模块1/pom.xml(模块1 pom)-模块2/pom.xml(模块2 pom) 普通/聚甲醛。xml: 我尝试将插件添加到构建pom

  • 为了在跨API开发中向开发者提供一致的开发体验,所有的命名应该保证: 简单 直观 一致 这适用于接口、资源、集合、方法以及消息的命名。 因为很多开发者并非以英语作为母语,所以命名约定的目标之一是确保大多数开发者可以更容易理解 API。对于方法和资源,我们鼓励使用简单、直观和一致的单词来命名。 API 中的命名应该使用正确的美式英语。例如,使用美式英语的 license 而非英式英语的 licenc

  • 在本节,我们不会讨论适用于大规模和可维护的最佳 CSS 命名方案,因为这不仅仅超过了个人的能力范围,也不是一个Sass样式指南可以解决的问题。我个人推荐遵从 CSS Guidelines 的建议。 良好的命名对保持整体代码的一致性和可读性非常重要,在 Sass 中可以命名的地方如下: 变量; 函数; 混合宏。 由于 Sass 占位符遵循和类名相同的命名模式,因此被视为常规的 CSS 选择器,也就在