2014-05-16 8 views
1

웹 스타트 앱 중 하나의 다운로드 크기를 줄이는 임무를 맡았습니다. 나는 다운로드의 상당한 부분이 jar 파일의 모든 대형 라이브러리로부터 왔음을 알았고 우리가 거의 업데이트하지 않았기 때문에 JNLP Version Download Protocol을 사용하여 다운로드가 크게 줄어들 것으로 보인다. 새로운 버전의 앱이 출시되면 같은 항아리를 계속해서 다시 다운로드하지 않아야합니다.JNLP 버전 명명 규칙을 사용하려면 어떻게해야합니까?

이제 프로젝트는 maven으로 빌드됩니다. 프로세스의 일부는 속도 템플릿에서 자동으로 JNLP 파일을 생성합니다.

<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... 

그것은 그 받는다는는 표준 명명 규칙을 사용하여에서 단지 이름을 건설하고 나에게 보인다 JNLP 파일의 리소스 섹션이 $로 채워집니다 종속성 assumedly과 받는다는에 의해 전달 된 변수는 다음과 같이 보입니다 프로젝트 pom 파일에서 artifactId 및 version 태그를 삭제합니다.

어떻게 대신 JNLP 명명 규칙을 사용할 수 있습니까?

$ dependencies 변수를 자르고 JNLP 규칙과 다시 결합하도록 속도 템플릿을 변경할 수 있습니다.하지만 실제 Jar 이름도 변경해야하기 때문에 필요한 절반 정도입니다.

답변

0

버전 다운로드 프로토콜 기사는 리소스가 최신인지 확인하는 속도가 빨라졌습니다. 유용 할 수도 있지만 동일한 파일을 다시 다운로드하지 못하는 부분이 아닙니다.

Webstart-maven-plugin은 jar의 버전 관리를 처리 할 수 ​​있으며 버전 프로토콜을 사용한다고 선언합니다. http://www.mojohaus.org/webstart/webstart-maven-plugin/jnlp-mojo.html#outputJarVersions

제 개인적인 경험은 문서의 내용과 다릅니다. 결과 jnlp에 jar의 version 속성을 추가하고 버전 다운로드 프로토콜에 필요한 것으로 보이는 jnlp.versionEnabled 속성을 설정하지 않습니다. 어느 쪽이든 JWS는 예상대로 작동합니다. 버전이 변경되지 않으면 파일이 다시 다운로드되지 않습니다.

플러그인 설정 :

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

그리고 그것은 이름이 참조하는 파일 : 버전 종속성의 속성을 보여주는 생성 foo.jnlp에서

<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> 

발췌

commons-collections-3.2.1.jar 
+0

이 오래된 질문에 대한 귀하의 의견을 보내 주셔서 감사합니다! 논리적 인 것처럼 대답을 받아 들일 것입니다.하지만 불행히도 저는 더 이상 maven이나 웹 스타트 작업을하지 않으므로 이것이 정확하게 저에게 얼마나 도움이되었는지 정확한 피드백을 줄 수는 없습니다. 희망적으로 다른 사람들을 돕는다! – Numeron