diff --git a/release/.cvsignore b/release/.cvsignore
index e5e33942..badc0e7f 100644
--- a/release/.cvsignore
+++ b/release/.cvsignore
@@ -1,3 +1,4 @@
target
velocity.log
maven.log
+*~
diff --git a/release/plugin.jelly b/release/plugin.jelly
index a5a9dde8..91417eb3 100644
--- a/release/plugin.jelly
+++ b/release/plugin.jelly
@@ -2,12 +2,8 @@
+ xmlns:i="jelly:interaction"
+ xmlns:r="jelly:org.apache.maven.release.jelly.ReleaseTagLibrary">
@@ -38,86 +34,78 @@
| of the latest snapshot.
-->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
- The following dependencies have SNAPSHOT identifiers:
-
-
- ${dependency.artifactId}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The following dependencies have SNAPSHOT identifiers:
+
+
+ ${dependency.artifactId}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/release/project.xml b/release/project.xml
index 98133bf3..c871b132 100644
--- a/release/project.xml
+++ b/release/project.xml
@@ -41,6 +41,10 @@
jaxen
1.0-FCS-full
+
+ commons-jelly
+ SNAPSHOT
+
saxpath
1.0-FCS
@@ -50,6 +54,11 @@
1.0.b2
http://xml.apache.org/xerces2-j/
+
+ commons-jelly
+ commons-jelly-tags-interaction
+ SNAPSHOT
+
diff --git a/release/src/main/org/apache/maven/release/PomDependencyManipulator.java b/release/src/main/org/apache/maven/release/PomNodeSelector.java
similarity index 62%
rename from release/src/main/org/apache/maven/release/PomDependencyManipulator.java
rename to release/src/main/org/apache/maven/release/PomNodeSelector.java
index 6e6d9dc1..c686a0f2 100644
--- a/release/src/main/org/apache/maven/release/PomDependencyManipulator.java
+++ b/release/src/main/org/apache/maven/release/PomNodeSelector.java
@@ -55,7 +55,6 @@ package org.apache.maven.release;
*
* ====================================================================
*/
-
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
@@ -67,26 +66,84 @@ import org.jaxen.JaxenException;
import org.jaxen.dom4j.Dom4jXPath;
import java.io.File;
+
+import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
/**
- * This is a simple POM manipulator that doesn't take into
- * account any sort of POM inheritance. When the interpolation
- * and inheritance is cleaned up in the Maven we will be able
- * to serialize a POM directly with greater ease. But we may stick
- * with this Jaxen solution anyway because it's so easy. Just turn
- * the POM in memory into a Dom4j document and perform the same
- * operation as we are here.
+ * This is a simple POM manipulator that doesn't take into account any sort of
+ * POM inheritance. When the interpolation and inheritance is cleaned up in the
+ * Maven we will be able to serialize a POM directly with greater ease. But we
+ * may stick with this Jaxen solution anyway because it's so easy. Just turn the
+ * POM in memory into a Dom4j document and perform the same operation as we are
+ * here.
*/
-public class PomDependencyManipulator
+public class PomNodeSelector
{
- /** POM document */
+ /**
+ * POM document
+ */
private File pom;
+
+ /**
+ * Xpath expression.
+ */
+ private String xpathExpression;
+
+ /**
+ * Snapshot dependencies found.
+ */
+ private List nodes;
+
+ /**
+ * Constructor.
+ */
+ public PomNodeSelector()
+ {
+ nodes = new ArrayList();
+ }
+
+ // -------------------------------------------------------------------------
+ // Accessors
+ // -------------------------------------------------------------------------
+
+ public void setXpathExpression( String xpathExpression )
+ {
+ this.xpathExpression = xpathExpression;
+ }
- /** Xpath expression to extract dependencies with SNAPSHOT version identifiers */
- private String snapshotXPath = "/project/dependencies/dependency[version='SNAPSHOT']";
-
+ public String getXpathExpression()
+ {
+ return xpathExpression;
+ }
+
+ /**
+ * Sets the nodes attribute of the PomManipulator object
+ */
+ public void setNodes(List nodes)
+ {
+ this.nodes = nodes;
+ }
+
+ /**
+ * Gets the nodes attribute of the PomManipulator object
+ */
+ public List getNodes()
+ {
+ return nodes;
+ }
+
+ public void setPom( File pom )
+ {
+ this.pom = pom;
+ }
+
+ public File getPom()
+ {
+ return pom;
+ }
+
/**
* Update the snapshot version identifiers with actual timestamp versions
* and write out the POM in its updated form.
@@ -97,19 +154,13 @@ public class PomDependencyManipulator
throws Exception
{
SAXReader reader = new SAXReader();
- Document doc = reader.read( pom );
- XPath xpath = new Dom4jXPath( snapshotXPath );
- List results = xpath.selectNodes( doc );
+ Document doc = reader.read( getPom() );
- for ( Iterator i = results.iterator(); i.hasNext(); )
- {
- Object object = i.next();
-
- if (object instanceof Node)
- {
- Node version = (Node) object;
- version.setText("non-snapshot-version");
- }
- }
+ // The selecting nodes with the xpath expression will give us a list
+ // of dependencies elements where the version element is equal to 'SNAPSHOT'.
+ // So we can get any information we need, and alter anything we need to before writing
+ // the dom4j document back out.
+ XPath xpath = new Dom4jXPath( getXpathExpression() );
+ setNodes(xpath.selectNodes(doc));
}
}
diff --git a/release/src/test-data/test-pom.xml b/release/src/test-data/test-pom.xml
new file mode 100644
index 00000000..ea8c5d74
--- /dev/null
+++ b/release/src/test-data/test-pom.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ A
+ SNAPSHOT
+
+
+ B
+ SNAPSHOT
+
+
+ C
+ SNAPSHOT
+
+
+
+