evenisse    2003/02/21 07:20:47

  Modified:    src/plugins-build/jnlp plugin.jelly plugin.properties
  Added:       src/plugins-build/jnlp/src/main/org/apache/maven/jnlp
                        UpdateManifest.java
               src/plugins-build/jnlp/src/plugin-resources jnlp.manifest
  Log:
  Correction of java web start bug defines here :
    o http://forum.java.sun.com/thread.jsp?thread=275890&forum=38&message=1336773
    o http://developer.java.sun.com/developer/bugParade/bugs/4739089.html
  
  Revision  Changes    Path
  1.2       +78 -11    jakarta-turbine-maven/src/plugins-build/jnlp/plugin.jelly
  
  Index: plugin.jelly
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-maven/src/plugins-build/jnlp/plugin.jelly,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- plugin.jelly      24 Jan 2003 03:45:36 -0000      1.1
  +++ plugin.jelly      21 Feb 2003 15:20:46 -0000      1.2
  @@ -1,8 +1,19 @@
   <?xml version="1.0"?>
   
  -<project xmlns:j="jelly:core"
  -         xmlns:u="jelly:util">
  -
  +<project
  +  xmlns:j="jelly:core"
  +  xmlns:u="jelly:util"
  +  xmlns:define="jelly:define"
  +  xmlns:jarfile="jarfile">
  +
  +    <define:taglib uri="jarfile">
  +      <define:jellybean
  +        name="updateManifest"
  +        className="org.apache.maven.jnlp.UpdateManifest"
  +        method="process"
  +      />
  +    </define:taglib>
  +    
       <!-- ================================================================== -->
       <!-- Generate JNLP files and signs jars if necessary                    -->
       <!-- ================================================================== -->
  @@ -17,6 +28,9 @@
           <mkdir dir="${maven.jnlp.dir}"/>
           <echo>Creating ${maven.jnlp.dir}/${pom.artifactId}.jnlp ...</echo>
   
  +        <!-- ================== -->
  +        <!-- Generate JNLP file -->
  +        <!-- ================== -->
           <j:file name="${maven.jnlp.dir}/${pom.artifactId}.jnlp" prettyPrint="true"
             xmlns="dummy">
               <jnlp spec="${maven.jnlp.spec}"
  @@ -108,24 +122,59 @@
                   </j:choose>
               </jnlp>
           </j:file>
  -
  +        
  +        <!-- =========================== -->
  +        <!-- Copy jars in jnlp directory -->
  +        <!-- =========================== -->
           <available file="${maven.jnlp.signjar.store}" 
property="maven.jnlp.store.exists"/>
  -        <j:if test="${maven.jnlp.store.exists}">
  +        <j:choose>
  +          <j:when test="${maven.jnlp.store.exists}">
   
  +            <!-- ================ -->
  +            <!-- Updates Manifest -->
  +            <!-- ================ -->
  +            <mkdir dir="${maven.jnlp.tmpdir}"/>
  +            
  +            <jarfile:updateManifest
  +                inputJar="${maven.build.dir}/${maven.final.name}.jar"
  +                manifest="${plugin.resources}/jnlp.manifest"
  +                outputDir="${maven.jnlp.tmpdir}"
  +            />
  +            
  +            <j:forEach var="dep" items="${pom.dependencies}">
  +              <j:if test="${dep.getProperty('jnlp.jar')=='true'}">
  +                <jarfile:updateManifest
  +                    
inputJar="${maven.repo.local}/${dep.artifactDirectory}/jars/${dep.artifact}"
  +                    manifest="${plugin.resources}/jnlp.manifest"
  +                    outputDir="${maven.jnlp.tmpdir}"
  +                />
  +              </j:if>
  +              <j:if test="${dep.getProperty('jnlp.native.jar')=='true'}">
  +                <jarfile:updateManifest
  +                    
inputJar="${maven.repo.local}/${dep.artifactDirectory}/jars/${dep.artifact}"
  +                    manifest="${plugin.resources}/jnlp.manifest"
  +                    outputDir="${maven.jnlp.tmpdir}"
  +                />
  +              </j:if>
  +            </j:forEach>
  +    
  +            <!-- ========= -->
  +            <!-- Sign jars -->
  +            <!-- ========= -->
               <echo>Found a store...signing jars</echo>
   
               <echo>Signing jar files ...</echo>
               <signjar
  -                jar="${maven.build.dir}/${maven.final.name}.jar"
  +                jar="${maven.jnlp.tmpdir}/${maven.final.name}.jar"
                   signedjar="${maven.jnlp.dir}/${maven.final.name}.jar"
                   alias="${maven.jnlp.signjar.alias}"
                   storepass="${maven.jnlp.signjar.storepass}"
                   keystore="${maven.jnlp.signjar.store}"/>
   
  -            <j:forEach var="lib" items="${pom.dependencies}">
  +              <j:forEach var="lib" items="${pom.dependencies}">
                   <j:if test="${lib.getProperty('jnlp.jar')=='true'}">
                       <signjar
  -                        
jar="${maven.repo.local}/${lib.artifactDirectory}/jars/${lib.artifact}"
  +                        jar="${maven.jnlp.tmpdir}/${lib.artifact}"
                           signedjar="${maven.jnlp.dir}/${lib.artifact}"
                           alias="${maven.jnlp.signjar.alias}"
                           storepass="${maven.jnlp.signjar.storepass}"
  @@ -133,14 +182,32 @@
                   </j:if>
                   <j:if test="${lib.getProperty('jnlp.native.jar')=='true'}">
                       <signjar
  -                        
jar="${maven.repo.local}/${lib.artifactDirectory}/jars/${lib.artifact}"
  +                        jar="${maven.jnlp.tmpdir}/${lib.artifact}"
                           signedjar="${maven.jnlp.dir}/${lib.artifact}"
                           alias="${maven.jnlp.signjar.alias}"
                           storepass="${maven.jnlp.signjar.storepass}"
                           keystore="${maven.jnlp.signjar.store}"/>
                   </j:if>
  -            </j:forEach>
  -        </j:if>
  +              </j:forEach>
  +          </j:when>
  +          <j:otherwise>
  +              <copy todir="${maven.jnlp.dir}" flatten="true">
  +                <fileset dir="${maven.repo.local}">
  +                  <j:forEach var="dep" items="${pom.dependencies}">
  +                    <j:if test="${dep.getProperty('jnlp.jar')=='true'}">
  +                      <include 
name="${dep.artifactDirectory}/jars/${dep.artifact}"/>
  +                    </j:if>
  +                    <j:if test="${dep.getProperty('jnlp.native.jar')=='true'}">
  +                      <include 
name="${dep.artifactDirectory}/jars/${dep.artifact}"/>
  +                    </j:if>
  +                  </j:forEach>
  +                </fileset>
  +                <fileset dir="${maven.build.dir}">
  +                  <include name="${maven.final.name}.jar"/>
  +                </fileset>
  +              </copy>
  +          </j:otherwise>
  +        </j:choose>
       </goal>
       
       <!-- ================================================================== -->
  
  
  
  1.3       +1 -0      jakarta-turbine-maven/src/plugins-build/jnlp/plugin.properties
  
  Index: plugin.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-maven/src/plugins-build/jnlp/plugin.properties,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- plugin.properties 6 Feb 2003 16:59:54 -0000       1.2
  +++ plugin.properties 21 Feb 2003 15:20:46 -0000      1.3
  @@ -2,6 +2,7 @@
   # P L U G I N  P R O P E R T I E S
   # -------------------------------------------------------------------
   maven.jnlp.dir=${maven.build.dir}/jnlp
  +maven.jnlp.tmpdir=${maven.build.dir}/jnlp_temp
   maven.jnlp.spec=1.0+
   
   maven.jnlp.http.codebase=${pom.url}
  
  
  
  1.1                  
jakarta-turbine-maven/src/plugins-build/jnlp/src/main/org/apache/maven/jnlp/UpdateManifest.java
  
  Index: UpdateManifest.java
  ===================================================================
  package org.apache.maven.jnlp;
  
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Maven" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Maven", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
  import java.io.InputStream;
  import java.util.Enumeration;
  import java.util.jar.JarEntry;
  import java.util.jar.JarFile;
  import java.util.jar.JarOutputStream;
  
  /**
   * Updates manifest for correcting java webstart bug
   *
   * @author <a href="mailto:[EMAIL PROTECTED]";>Emmanuel Venisse</a>
   * @version $Id: UpdateManifest.java,v 1.1 2003/02/21 15:20:46 evenisse Exp $
   */
  public class UpdateManifest
  {
      private File inputJar;
      private File manifest;
      private File outputDir;
  
      public void process() throws Exception
      {
          System.out.println("Update Manifest in " + inputJar.getName());
          JarFile jarFile = new JarFile(inputJar);
          Enumeration enum = jarFile.entries();
          File outputJar = new File(outputDir, inputJar.getName());
          FileOutputStream fos = new FileOutputStream(outputJar);
          JarOutputStream jos = new JarOutputStream(fos);
          while (enum.hasMoreElements()) {
              process(jarFile, jos, (JarEntry)enum.nextElement());
          }
          jos.close();
          jarFile.close();
          outputJar.setLastModified(inputJar.lastModified());
      }
      
      private void process(JarFile jarFile, JarOutputStream jos, JarEntry entry)
          throws Exception
      {
          InputStream is = jarFile.getInputStream(entry);
          JarEntry je = entry;
          if (entry.getName().equalsIgnoreCase("META-INF/MANIFEST.MF"))
          {
              je = new JarEntry("META-INF/MANIFEST.MF");
              is = new FileInputStream(manifest);
          }
          jos.putNextEntry(je);
          byte[] buffer = new byte[2048];
          int read = 0;
          while((read = is.read(buffer)) > 0)
          {
              jos.write(buffer, 0, read);
          }
          jos.closeEntry();
      }
      
      public void setInputJar(File input)
      {
          this.inputJar = input;
      }
      
      public File getInputJar()
      {
          return inputJar;
      }
      
      public void setManifest(File manifest)
      {
          this.manifest = manifest;
      }
      
      public File getManifest()
      {
          return manifest;
      }
      
      public void setOutputDir(File outputDir)
      {
          this.outputDir = outputDir;
      }
      
      public File getOutputDir()
      {
          return outputDir;
      }
  }
  
  
  1.1                  
jakarta-turbine-maven/src/plugins-build/jnlp/src/plugin-resources/jnlp.manifest
  
  Index: jnlp.manifest
  ===================================================================
  Manifest-Version: 1.0
  Created-By: Apache Jakarta Maven
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to