2013-05-15 36 views

回答

4

基於MWEBSTART-176這看起來像一個已被請求但尚未實現的功能。

+0

我工作的這個新問題。 –

3

JNLP簽名(自動生成APPLICATION.JNLP或APPLICATION_TEMPLATE.JNLP)可以用幾個maven插件組合完成。通常,webstart-maven-plugin執行完整的工作,包括在Maven模塊中打包工件(例如zip文件)。做JNLP簽約的關鍵是這個任務分成幾個步驟:

A)爲APPLICATION.JNLP代:

  1. 生成JNLP和簽署所有庫(包括清單條目 更新)到目錄/目標與在webstart-行家-插件
  2. 拷貝&重命名jnlp文件從/目標/ JNLP DIR到 目標/ JNLP/main.jar文件/ JNLP-INF /與 truezip-行家-插件APPLICATION.JNLP
  3. repeately/JNLP在target/jnlp/ma中籤名main.jar文件in.jar與 maven-jarsigner-plugin
  4. package/target/jnlp directory to artifact例如與 行家-戰爭插件或行家組裝-插件

B)爲APPLICATION_TEMPLATE.JNLP代(點1和2從前面的步驟不同):

  1. 產生兩個:JNLP, APPLICATION_TEMPLATE.JNLP並簽署所有 庫(包括清單條目更新)到目錄 /目標/ JNLP與Webstart的,Maven的插件
  2. 移動APPLICATION_TEMPLATE.JNLP文件從 /target/jnlp/APPLICATION_TEMPLATE.JNLP目標/ JNLP /的main.jar/JNLP-INF/APPLICATION_TEMPLATE的.jnlp與truezip-行家-插件
  3. repeately登錄目標/ JNLP/main.jar文件文件的main.jar與行家-的jarsigner-插件
  4. 包/目標/ JNLP目錄僞像例如與 Maven的戰爭插件或Maven的組裝插件

注1:文件的main.jar簽訂兩次(1級)和3)),這是開銷比較簽署所有罐子只有一次在步驟3)通過maven-jarsigner-plugin。但我們需要這樣做,因爲webstart-maven-plugin僅通過配置的簽名更新清單文件(具有許可頭)。注意2:當webstart應用程序具有許多不同的構建配置文件時,此方法運行良好,因爲APPLICATION.JNLP或APPLICATION_TEMPLATE.JNLP是基於配置文件以自動方式生成的。

注3:需要我比1,這一天的一半以上,以開發和測試這種方法,希望它讓你的生活更輕鬆;)

下面是兩種類型的JNLP簽署的某些部分的pom.xml 。 A)用於應用。JNLP代:

<project ....> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
      <!-- Step 1) your obvious configuration, also with signing, 
      assume that generated jnlp file has name: launch.jnlp --> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>webstart-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>generate-jnlp-and-sign-libs</id> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>jnlp-inline</goal> 
        </goals> 
        ... 
       </execution>  
      </executions>    
      ... 
     </plugin> 
     <plugin> 
      <!-- Step 2) copy & rename of jnlp to APPLICATION_JNLP in main.jar --> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>truezip-maven-plugin</artifactId> 
      <version>1.1</version> 
      <executions> 
       <execution> 
        <id>copy-jnlp-template</id> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <phase>prepare-package</phase> 
        <configuration> 
         <files> 
          <file> 
           <source>${project.build.directory}/jnlp/launch.jnlp</source> 
           <outputDirectory>${project.build.directory}/jnlp/main.jar/JNLP-INF</outputDirectory> 
           <destName>APPLICATION.JNLP</destName> 
          </file> 
         </files> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <!-- Step 3) repeat signing of main.jar --> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jarsigner-plugin</artifactId> 
      <version>1.2</version> 
      <executions> 
       <execution> 
        <id>sign</id> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>sign</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <archiveDirectory>${project.build.directory}/jnlp</archiveDirectory> 
       <includes> 
        <include>main.jar</include> 
       </includes> 
       <keystore>...</keystore> 
       <storepass>...</storepass> 
       <alias>...</alias> 
       <verbose>true</verbose> 
      </configuration> 
     </plugin> 
     <plugin> 
      <!-- Step 4) custom packaging --> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>${maven-war-plugin.version}</version> 
      <configuration> 
       ... 
       <webResources> 
        <resource> 
         <directory>${project.build.directory}/jnlp</directory> 
        </resource> 
        ... 
       </webResources> 
       ... 
      </configuration> 
     </plugin> 
    </build> 
    </project> 

B)爲APPLICATION_TEMPLATE.JNLP代:

<project ....> 
     ... 
     <build> 
      <plugins> 
       <plugin> 
        <!-- Step 1) your obvious configuration + added one new execution 
        for APPLICATION_TEMPLATE.jnlp file generation from template stored 
        in /templates/APPLICATION_TEMPLATE.jnlp dir --> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>webstart-maven-plugin</artifactId> 
        <executions> 
         <execution> 
          <!-- This is new execution block, don't be afraid, 
           inspite of multiple executions 
           signing and manifest update is performed only once --> 
          <id>generate-jnlp-template-for-signing</id> 
          <phase>generate-resources</phase> 
          <goals> 
           <goal>jnlp-inline</goal> 
          </goals> 
          <configuration> 
           <jnlp> 
            <inputTemplateResourcePath>${project.basedir}/templates 
            </inputTemplateResourcePath> 
            <inputTemplate>APPLICATION_TEMPLATE.jnlp</inputTemplate> 
            <outputFile>APPLICATION_TEMPLATE.jnlp</outputFile> 
            <mainClass>...</mainClass> 
           </jnlp> 
          </configuration> 
         </execution> 
         <execution>      
          <id>generate-jnlp-and-sign-libs</id> 
          <phase>generate-resources</phase> 
          <goals> 
           <goal>jnlp-inline</goal> 
          </goals> 
          <configuration> 
           <jnlp> 
           <!-- JNLP settings from your obvious configuration --> 
           ... 
           </jnlp> 
          </configuration> 
          ... 
         </execution>  
        </executions>    
        ... 
       </plugin> 
       <plugin> 
        <!-- Step 2) move to APPLICATION_TEMPLATE from /target/jnlp 
         to target/jnlp/main.jar/JNLP-INF dir --> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>truezip-maven-plugin</artifactId> 
        <version>1.1</version> 
        <executions> 
         <execution> 
          <id>move-jnlp-template</id> 
          <goals> 
           <goal>move</goal> 
          </goals> 
          <phase>prepare-package</phase> 
          <configuration> 
           <from>${project.build.directory}/jnlp/APPLICATION_TEMPLATE.jnlp 
           </from> 
           <to>${project.build.directory}/jnlp/lib/main.jar/JNLP-INF/APPLICATION_TEMPLATE.jnlp 
           </to> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 

       <!-- Steps 3) and 4) are same as in previous code block -->    
     </build> 
    </project>