Le sam, 27/03/2004 Ã 16:23 +0100, Nicolas Mailhot a Ãcrit : > I've added a few pages in the wiki over the last few days. > > (http://java.debian.net/index.php/CommonJavaPackaging)
BTW if someone wants to play with xml dependency descriptors like the ones declared in : http://java.debian.net/index.php/Classpath%20unit%20description .. here is a proof-of-concept xslt that converts them into a java classpath. Usage : 1. write some bogus descriptors following the template in the wiki (the more complex the better - we want to stress the infrastructure) 2. reference them into an index file, for example : <?xml version="1.0"?> <classesdb xmlns:xi="http://www.w3.org/2003/XInclude"> <xi:include href="foo-a.b.c.xml"/> <xi:include href="bar-d.e.f.xml"/> </classesdb> 3. generate the classpath using your favorite xslt engine, for example with xltproc : xsltproc --xinclude --stringparam path foo pathtest.xsl index.xml Warning ! The xsl is still very immature and feature-incomplete. The following is not implemented yet : - generating a classpath from more than one element - smart version handling (ie if we ask for version x.y.z, generate foo.jar:foo-x.jar:foo-x.y.jar:foo-x.y.z.jar as classpath) - virtual priority (ie have a separate policy file that specifies implementation priorities for virtuals) - blacklisting checking (ie do not generate a path with foo and bar is foo declares it can not work with bar, do not use elements that conflict with the selected java engine...) - classpath sanitization (do not output a classelement twice in the final path) - non classpath-string mode (output file lists to create a directory of jar links for application servers, ant, eclipse and everything that uses jar directories) ... and probably a lot more I forgot The following however should already work : - recursive deps - basic virtual handling (ie pathelement foo declaring it implements bar virtual, and the classpath engine resolving foo when asked for bar) - multi-extension handling (ie not everything is a jar file) - config file handling (place config files before jar files so foo.properties in /etc/ will be taken into account instead of hidden foo.properties in foo.jar) - user overrides (always check for files into ~/.java before sourcing system-level ones) Which is not too bad for a 100-line file. However I really feel the more complete the policy we wan to implement, the more xslt+xpath will shine - consolidating data in loosely written files in exactly why it was written. BTW xsltproc is blazingly fast here - I doubt a shell implementation would be any faster. In fact I suspect it'll end up faster than anything in shell - all the optimizations the Gnome folks did to process heavy docbook documents seem to paying of nicely. Regards, -- Nicolas Mailhot
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl"> <xsl:output method="text" encoding="UTF-8"/> <xsl:key name="pathelems" match="/classesdb/pathelem" use="@name"/> <xsl:key name="virtuals" match="/classesdb/pathelem/implements/pathelem" use="@name"/> <xsl:param name="sysconfdir">/etc/java</xsl:param> <xsl:param name="usrconfdir">~/.java/etc</xsl:param> <xsl:param name="sysjardir">/usr/share/java</xsl:param> <xsl:param name="usrjardir">~/.java/lib</xsl:param> <xsl:param name="path" required="yes"/> <xsl:template match="/"> <xsl:variable name="expanded"> <classpath> <xsl:call-template name="findelem"> <xsl:with-param name="pathname" select="$path"/> </xsl:call-template> </classpath> </xsl:variable> <xsl:variable name="classpath"> <xsl:for-each select="exsl:node-set($expanded)/*"> <xsl:apply-templates/> </xsl:for-each> </xsl:variable> <xsl:copy-of select="$classpath"/> </xsl:template> <xsl:template match="depends/pathelem" priority="1"> <xsl:call-template name="findelem"> <xsl:with-param name="pathname" select="@name"/> </xsl:call-template> </xsl:template> <xsl:template match="pathelem" priority="0"> <xsl:apply-templates select="config" mode="full"/> <xsl:apply-templates select="classes" mode="full"/> <xsl:apply-templates select="depends/pathelem"/> </xsl:template> <xsl:template name="findelem"> <xsl:param name="pathname" required="yes"/> <xsl:choose> <xsl:when test="count(key('pathelems',$pathname))>0"> <xsl:apply-templates select="key('pathelems',$pathname)[1]"/> </xsl:when> <xsl:when test="count(key('virtuals',$pathname))>0"> <xsl:apply-templates select="key('virtuals',$pathname)[1]/../.."/> </xsl:when> <xsl:otherwise> <xsl:message>Could not find matching classpath element for <xsl:value-of select="$pathname"/></xsl:message> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="config|classes" mode="full"> <pathbit> <xsl:apply-templates select="." mode="prefix"/> <xsl:apply-templates select="." mode="version"/> <xsl:apply-templates select="." mode="root"/> </pathbit> </xsl:template> <xsl:template match="[EMAIL PROTECTED] and (self::config or self::classes)]" mode="prefix"> <prefix><xsl:value-of select="@dir"/></prefix> <postfix>/</postfix> </xsl:template> <xsl:template match="[EMAIL PROTECTED]" mode="prefix"> <prefix><xsl:value-of select="@libdir"/></prefix> <postfix>/*</postfix> </xsl:template> <xsl:template match="[EMAIL PROTECTED] and (self::config or self::classes)]" mode="prefix"> <prefix><xsl:value-of select="@file"/></prefix> <xsl:apply-templates select="." mode="postfix"/> </xsl:template> <xsl:template match="[EMAIL PROTECTED] and @ext and (self::config or self::classes)]" mode="postfix" priority="1"> <postfix><xsl:value-of select="concat('.',@ext)"/></postfix> </xsl:template> <xsl:template match="[EMAIL PROTECTED]" mode="postfix" priority="0"> <postfix>.properties</postfix> </xsl:template> <xsl:template match="[EMAIL PROTECTED]" mode="postfix" priority="0"> <postfix>.jar</postfix> </xsl:template> <xsl:template match="[EMAIL PROTECTED] and (self::config or self::classes)]" mode="version" priority="1"> <version><xsl:value-of select="@version"/></version> </xsl:template> <xsl:template match="config|classes" mode="version" priority="0"> <version><xsl:value-of select="../@version"/></version> </xsl:template> <xsl:template match="config" mode="root"> <sysroot><xsl:value-of select="$sysconfdir"/></sysroot> <usrroot><xsl:value-of select="$usrconfdir"/></usrroot> </xsl:template> <xsl:template match="classes" mode="root"> <sysroot><xsl:value-of select="$sysjardir"/></sysroot> <usrroot><xsl:value-of select="$usrjardir"/></usrroot> </xsl:template> <xsl:template match="pathbit"> <xsl:variable name="pathlet" select="concat(prefix,'-',version,postfix)"/> <xsl:choose> <xsl:when test="starts-with($pathlet,'/')"> <xsl:value-of select="$pathlet"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="concat(usrroot,'/',$pathlet,':',sysroot,'/',$pathlet)"/> </xsl:otherwise> </xsl:choose> <xsl:if test="position() != last()">:</xsl:if> </xsl:template> </xsl:stylesheet>
signature.asc
Description: Ceci est une partie de message =?ISO-8859-1?Q?num=E9riquement?= =?ISO-8859-1?Q?_sign=E9e?=