Hi,

it seems that this attachment didn't work. Has anyone an idea why not ?

Here is the code:
-----------------------------------------------------------------------
<?xml version="1.0"?>

<project 
  xmlns:j="jelly:core"
  xmlns:ant="jelly:ant"
  xmlns:license="license"
  xmlns:maven="jelly:maven"
  xmlns:log="jelly:log"
  xmlns:deploy="deploy"
  xmlns:util="jelly:util"
  xmlns:doc="doc">

  <!-- ==================================================================
-->
  <!-- Transitive Dependencies
-->
  <!-- ==================================================================
-->
  <goal name="transitive-deps:append"  
    description="Append transitive dependencies">
    <j:new var="subArtis" className="java.util.HashMap"/>
    <j:new var="subDeps" className="java.util.HashMap"/>
    <j:new var="artifactStack" className="java.util.LinkedList"/>
    <j:set var="dummy" value="${artifactStack.add(pom.artifacts)}"/>
    <j:set var="i" value="0"/> <!-- used for debugging only -->
    <attainGoal name="transitive-deps:recurse" />
    <j:set var="dummy" value="${pom.artifacts.clear()}"/>
    <j:set var="dummy" value="${pom.artifacts.addAll(subArtis.values())}"/>
    <j:set var="dummy" value="${pom.dependencies.clear()}"/>
    <j:set var="dummy"
value="${pom.dependencies.addAll(subDeps.values())}"/>
  </goal>

  <goal name="transitive-deps:recurse" description="Append transitive
dependencies">
    <j:set var="i" value="${i+1}"/>
    <j:forEach var="artifact" items="${artifactStack.getLast()}">
      <log:trace>${i}: ${artifact.dependency.artifactId}</log:trace>
      <j:set var="pomdir__"
value="${maven.repo.local}/${artifact.dependency.artifactDirectory}/poms"/>
      <j:set var="pomfile"
value="${pomdir__}/${artifact.dependency.artifactId}-${artifact.dependency.v
ersion}.pom"/>
      <util:available file="${pomfile}">
        <maven:pom projectDescriptor="${pomfile}" var="depPom"/>
        <log:trace>${depPom.artifactId}</log:trace>
        <j:set var="dummy" value="${artifactStack.add(depPom.artifacts)}"/>
        <log:trace>${i}: recurse</log:trace>    
        <attainGoal name="transitive-deps:recurse" />
        <log:trace>${i}: back</log:trace>
        <j:set var="dummy" value="${artifactStack.removeLast()}"/> 
      </util:available>
      <log:trace>........</log:trace>
    </j:forEach>
    <j:forEach var="artifact" items="${artifactStack.getLast()}">  
      <!-- these artifacts are on a higher level than those in subArtis -->
      <log:trace>${i}: ${artifact.dependency.artifactId}</log:trace>
      <j:if test="${artifact.dependency.getProperty('jar.include') !=
'true'}">
        <j:set var="identifier"
value="${artifact.dependency.artifactDirectory}-${artifact.dependency.artifa
ctId}"/>
        <log:debug>${identifier}:
${subArtis.containsKey(identifier)}</log:debug>
        <j:choose>
          <j:when test="${subArtis.containsKey(identifier)}">
            <j:set var="storedDep" value="${subDeps.get(identifier)}"/>
            <j:choose>
              <j:when
test="${artifact.dependency.version.compareToIgnoreCase(storedDep.version)
>= 0}">
                <j:set var="dummy"
value="${subArtis.put(identifier,artifact)}"/>
                <j:set var="dummy"
value="${subDeps.put(identifier,artifact.dependency)}"/>        
                <j:set var="props"
value="${artifact.dependency.resolvedProperties()}"/>
                <j:set var="testProps"
value="${storedDep.resolvedProperties()}"/>
                <j:forEach var="prop" items="${testProps.keySet()}">
                  <j:if test="${!props.containsKey(prop)}">
                    <j:new var="prop_" className="java.lang.String">
                      <j:arg value="${prop}:${testProps.get(prop)}"/>
                    </j:new>
                    <j:set var="dummy"
value="${artifact.dependency.addProperty(prop_)}"/>
                  </j:if>
                </j:forEach>
              </j:when>
              <j:otherwise>
                <j:set var="props"
value="${artifact.dependency.resolvedProperties()}"/>
                <j:set var="storedProps"
value="${storedDep.resolvedProperties()}"/>
                <j:forEach var="prop" items="${props.keySet()}">
                  <j:choose>
                    <j:new var="prop_" className="java.lang.String">
                      <j:arg value="${prop}:${props.get(prop)}"/>
                    </j:new>
                    <j:when test="${storedProps.containsKey(prop) &amp;&amp;
!storedProps.get(prop).equals(props.get(prop))}">
                      <!-- the properties of the artifacts on the higher
level are more important -->
                      <j:new var="oldProp" className="java.lang.String">
                        <j:arg value="${prop}:${storedProps.get(prop)}"/>
                      </j:new>
                      <log:info>Property change:
${oldProp}-&gt;${props.get(prop)}</log:info>
                      <j:set var="dummy"
value="${storedDep.getProperties().set(storedDep.getProperties().indexOf(old
Prop), prop_)}"/>
                    </j:when>
                    <j:otherwise>
                      <j:set var="dummy"
value="${storedDep.addProperty(prop_)}"/>
                    </j:otherwise>
                  </j:choose>
                </j:forEach>
              </j:otherwise>
            </j:choose>
          </j:when>
          <j:otherwise>
            <j:set var="dummy"
value="${subArtis.put(identifier,artifact)}"/>
            <j:set var="dummy"
value="${subDeps.put(identifier,artifact.dependency)}"/>        
          </j:otherwise>
        </j:choose>
      </j:if>
    </j:forEach>
    <j:set var="i" value="${i-1}"/>
  </goal>

</project>

----------------------------------------------------------------------------
-----


-----Urspr�ngliche Nachricht-----
Von: Stoffels, Ralf (FWI-AW2) [mailto:[EMAIL PROTECTED]
Gesendet am: Dienstag, 17. Februar 2004 14:44
An: '[EMAIL PROTECTED]'
Betreff: Prototype implementation for transitive dependencies [Code]

Hi,

I couldn't wait until support of transitive dependencies is integrated in
Maven.
So I wrote a Jelly-plugin for this. It is very slow because it is written in
pure Jelly
and it evaluates several occurrences of the same artifact again and again.
I hope there will be a Java Bean based solution integrated in Maven in the
near future.

My plugin requires that the project files of all dependant projects are
deployed in the
local repository, e.g. with:
    <artifact:install
        artifact="${basedir}/project.xml"
        type="pom"
        project="${pom}"/> 
(please regard that all references to extended projects (like
${pom.groupId}) in the 
project files can't be resolved after deployment).

I don't know if there is any place, where you can contribute self-written
plugins,
so I just attached it to this mail.

Best regards,
Ralf

p.s.:
The check for the 'jar.include' property is for another plugin, which
includes the 
classes of certain dependencies in the jar file, to avoid too fine granular
jar files.

 <<plugin.jelly>> 



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

Reply via email to