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) &&
!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}->${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]