evenisse 2003-02-21 15:20:47 +00:00
parent c62c5c2576
commit 47bcefd504
4 changed files with 226 additions and 10 deletions

View File

@ -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>
<!-- ================================================================== -->

View File

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

View File

@ -0,0 +1,145 @@
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 apache@apache.org.
*
* 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:evenisse@ifrance.com">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;
}
}

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Created-By: Apache Jakarta Maven