Hi,

Over last few days I have been working on extracting some tasks from another 
project I was working on. These tasks basically aimed at helping manage 
"Optional Packages" (previously known as "Extensions" and before that 
"Standard Extensions"). These are basically the standard library format for 
most of newer specifications (servlet, ejb etc).

Basically what these specifications demand is a certain set of attributes in 
a jars manifest. One example of attributes required for an extension would be

Extension-Name: org.realityforge.dve 
Specification-Version: 1.0 
Specification-Vendor: Peter Donald 

Which declares a basic extension. You can read more about these extension 
specifications at 

http://java.sun.com/j2se/1.3/docs/guide/extensions/versioning.html. 

or at

http://jakarta.apache.org/ant/myrmidon/librarys.html

under dependencies.

Anyhow I have got two basic tasks going in myrmidon that I will backport to 
ant1.x and these are; jarlib-display and jarlib-manifest

* jarlib-display: this task will basically display all the Extensions a task
  implements or depends upon. It also displays the Package Specification that 
  a library implements. Some examples of task in action would be

        <jarlib-display file="../../src/ant1compat/jar/ant.jar"/> 
        <jarlib-display> 
            <fileset dir="../../"> 
                <include name="src/ant1compat/jar/*.jar"/> 
                <include name="lib/*.jar"/> 
            </fileset> 
        </jarlib-display> 

  The first would display only the information  in single jar while second 
form would display information in all the jars. The information comes out 
looking somethin like
  
----------------------------------------------------------------------------------
File: 
/mnt/dos-e/projects/jakarta-ant/proposal/myrmidon/src/ant1compat/jar/ant.jar
----------------------------------------------------------------------------------
Extensions Supported By Library:
Extension-Name: org.apache.tools.ant
Specification-Version: 1.4.9
Specification-Vendor: Apache Software Foundation
Implementation-Version: 1.4.9
Implementation-Vendor: Apache Software Foundation

Specifications Supported By Library:
Sections:  org/apache/tools/ant
Specification-Title: Apache Ant
Specification-Version: 1.4.9
Specification-Vendor: Apache Software Foundation
Implementation-Title: org.apache.tools.ant
Implementation-Version: 1.4.9
Implementation-Vendor: Apache Software Foundation

* jarlib-manifest: this task aims to make it easier to generate manifest that 
contain all the correct dependency information. An example invocation of taks 
would be 

        <jarlib-manifest 
            destfile="../../generated-manifest.txt" 
            extension-name="org.realityforge.dve" 
            specification-version="1.0" 
            specification-vendor="Peter Donald" > 
            <attribute name="Main-class" 
                       value="org.realityforg.dve.WorldGen"/> 
            <depends dir="../../"> 
                <include name="src/ant1compat/jar/*.jar"/> 
            </depends> 
            <depends dir="../../"> 
                <include name="lib/*.jar"/> 
            </depends> 
        </jarlib-manifest> 

This would generate a manifest with the specified extension, an extra 
attribute "Main-class" in the main section and all the dependency info. A 
sample output may be

Manifest-Version: 1.0 
Created-By: Myrmidon @@VERSION@@ compiled on @@DATE@@ 
Extension-Name: org.realityforge.dve 
Specification-Version: 1.0 
Specification-Vendor: Peter Donald 
Main-class: org.realityforg.dve.WorldGen 
Extension-List: lib0 lib1 
lib0-Extension-Name: org.apache.tools.ant 
lib0-Specification-Version: 1.4.9 
lib0-Specification-Vendor: Apache Software Foundation 
lib1-Extension-Name: org.apache.tools.ant.taskdefs.optional 
lib1-Specification-Vendor: Apache Software Foundation 
lib1-Specification-Version: 1.4.9 

Notice that by default you don't include the "implementation" details in the 
dependencies generated (at least not by default). To turn on dependency on a 
specific implementation of a library you could specify the attribute 
includeImpl="true" and it would generate

Manifest-Version: 1.0 
Created-By: Myrmidon @@VERSION@@ compiled on @@DATE@@ 
Extension-Name: org.realityforge.dve 
Specification-Version: 1.0 
Specification-Vendor: Peter Donald 
Main-class: org.realityforg.dve.WorldGen 
Extension-List: lib0 lib1 
lib0-Extension-Name: org.apache.tools.ant 
lib0-Specification-Version: 1.4.9 
lib0-Specification-Vendor: Apache Software Foundation 
lib0-Implementation-Version: 1.4.9 
lib0-Implementation-Vendor: Apache Software Foundation 
lib1-Extension-Name: org.apache.tools.ant.taskdefs.optional 
lib1-Specification-Vendor: Apache Software Foundation 
lib1-Implementation-Vendor: Apache Software Foundation 
lib1-Implementation-Version: 1.4.9 
lib1-Specification-Version: 1.4.9 
 
You can also turn on exposure of the Implementation-URL attribute by setting 
the attribute includeURL="true" on the filesets. In the cases where the 
library itself does not contain the implementation-URL attribute you can add 
the baseURL=".." , the javadocs for this attribute are as follows

   /** 
     * String that is the base URL for the librarys 
     * when constructing the "Implementation-URL" 
     * attribute. For instance setting the base to 
     * "http://jakarta.apache.org/avalon/libs/"; and then 
     * including the library "excalibur-cli-1.0.jar" in the 
     * fileset will result in the "Implementation-URL" attribute 
     * being set to 
"http://jakarta.apache.org/avalon/libs/excalibur-cli-1.0.jar"; 
     * 
     * Note this is only used if the library does not define 
     * "Implementation-URL" itself. 
     * 
     * Note that this also implies includeURL=true 
     */ 


Anyways before I port it across to ant1.x is there any functionality 
requests? The primary reason for creating this is to make projects like 
commons and excalibur easier to manage. Basically they all have lots of 
little libraries and these tasks are the start of making the dependency 
tracking partially-automated.

Anyways before I go ahead and do all this - requests? complaints? suggestions?

-- 
Cheers,

Pete

*------------------------------------------------------*
| "Computers are useless. They can only give you       |
|            answers." - Pablo Picasso                 |
*------------------------------------------------------*

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

Reply via email to