You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2008/05/15 10:11:10 UTC
svn commit: r656537 - in
/geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car:
AbstractCarMojo.java DependencyListener.java PlanProcessorMojo.java
ProjectNode.java
Author: djencks
Date: Thu May 15 01:11:09 2008
New Revision: 656537
URL: http://svn.apache.org/viewvc?rev=656537&view=rev
Log:
GERONIMO-4013 Follow entire dependency tree (not the pruned one maven cooks up) to rely on dependencies from car ancestors in prefernce to direct dependencies
Added:
geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/DependencyListener.java (with props)
geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ProjectNode.java (with props)
Modified:
geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/AbstractCarMojo.java
geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/PlanProcessorMojo.java
Modified: geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/AbstractCarMojo.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/AbstractCarMojo.java?rev=656537&r1=656536&r2=656537&view=diff
==============================================================================
--- geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/AbstractCarMojo.java (original)
+++ geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/AbstractCarMojo.java Thu May 15 01:11:09 2008
@@ -29,8 +29,10 @@
import java.util.Properties;
import java.util.Set;
import java.util.Collections;
+import java.util.HashMap;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.handler.DefaultArtifactHandler;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
@@ -95,7 +97,9 @@
* @readonly
*/
protected ArtifactFactory artifactFactory;
- protected Set<Artifact> dependencies;// = new DependencyTree();
+ protected Set<Artifact> dependencies;
+ protected Map<Artifact, Artifact> dependencyMap = new HashMap<Artifact, Artifact>();
+ protected ProjectNode projectNode;
//
// MojoSupport Hooks
@@ -234,6 +238,8 @@
project.setDependencyArtifacts(project.createArtifacts(artifactFactory, null, null));
}
+ DependencyListener listener = new DependencyListener();
+
ArtifactResolutionResult artifactResolutionResult = dependencyHelper.getArtifactCollector().collect(
project.getDependencyArtifacts(),
project.getArtifact(),
@@ -242,9 +248,13 @@
project.getRemoteArtifactRepositories(),
dependencyHelper.getArtifactMetadataSource(),
null,
- Collections.emptyList());
+ Collections.singletonList(listener));
dependencies = artifactResolutionResult.getArtifacts();
+ projectNode = listener.getTop();
+ for (Artifact artifact: dependencies) {
+ dependencyMap.put(DependencyListener.shrink(artifact), artifact);
+ }
}
protected class ArtifactLookupImpl
Added: geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/DependencyListener.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/DependencyListener.java?rev=656537&view=auto
==============================================================================
--- geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/DependencyListener.java (added)
+++ geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/DependencyListener.java Thu May 15 01:11:09 2008
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.geronimo.mavenplugins.car;
+
+import java.util.Stack;
+
+import org.apache.maven.artifact.resolver.ResolutionListener;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.DefaultArtifactHandler;
+import org.apache.maven.artifact.versioning.VersionRange;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+public class DependencyListener implements ResolutionListener {
+ private static final VersionRange RANGE = VersionRange.createFromVersion("");
+ private static final ArtifactHandler artifactHandler = new DefaultArtifactHandler();
+ private ProjectNode top;
+ private final Stack<ProjectNode> parents = new Stack<ProjectNode>();
+
+ public void testArtifact(Artifact artifact) {
+ if (!parents.isEmpty()) {
+ ProjectNode parent = parents.peek();
+ Artifact shrunk = shrink(artifact);
+ ProjectNode child = new ProjectNode(shrunk);
+ parent.addChild(child);
+ }
+ //else??
+ }
+
+ public void startProcessChildren(Artifact artifact) {
+ Artifact shrunk = shrink(artifact);
+ if (top == null) {
+ top = new ProjectNode(shrunk);
+ parents.push(top);
+ } else {
+ ProjectNode node = parents.peek();
+ for (ProjectNode child: node.getChildNodes()) {
+ if (shrunk.equals(child.getArtifact())) {
+ parents.push(child);
+ break;
+ }
+ }
+ }
+ }
+
+ public void endProcessChildren(Artifact artifact) {
+ ProjectNode node = parents.pop();
+ if (!shrink(artifact).equals(node.getArtifact())) {
+ throw new IllegalStateException("Unexpected parent, expected: " + artifact + " got " + node.getArtifact());
+ }
+ }
+
+ public void includeArtifact(Artifact artifact) {
+ }
+
+ public void omitForNearer(Artifact artifact, Artifact artifact1) {
+ }
+
+ public void updateScope(Artifact artifact, String s) {
+ }
+
+ public void manageArtifact(Artifact artifact, Artifact artifact1) {
+ }
+
+ public void omitForCycle(Artifact artifact) {
+ }
+
+ public void updateScopeCurrentPom(Artifact artifact, String s) {
+ }
+
+ public void selectVersionFromRange(Artifact artifact) {
+ }
+
+ public void restrictRange(Artifact artifact, Artifact artifact1, VersionRange versionRange) {
+ }
+
+ static Artifact shrink(Artifact artifact) {
+ Artifact shrunk = new DefaultArtifact(artifact.getGroupId(), artifact.getArtifactId(), RANGE, artifact.getScope(), artifact.getType(), artifact.getClassifier(), artifactHandler);
+ return shrunk;
+ }
+
+ public ProjectNode getTop() {
+ return top;
+ }
+}
Propchange: geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/DependencyListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/DependencyListener.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/DependencyListener.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/PlanProcessorMojo.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/PlanProcessorMojo.java?rev=656537&r1=656536&r2=656537&view=diff
==============================================================================
--- geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/PlanProcessorMojo.java (original)
+++ geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/PlanProcessorMojo.java Thu May 15 01:11:09 2008
@@ -34,7 +34,6 @@
import org.apache.geronimo.kernel.repository.Artifact;
import org.apache.geronimo.kernel.repository.Environment;
import org.apache.geronimo.kernel.repository.ImportType;
-import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
@@ -269,22 +268,29 @@
dependencies.add(gdep);
}
} else {
- List<org.apache.maven.model.Dependency> artifacts = project.getDependencies();
- processProject(dependencies, artifacts, dependencyHelper.getDependencies(project).getRootNode(), useMavenDependencies.isUseTransitiveDependencies());
+ LinkedHashSet<org.apache.geronimo.kernel.repository.Dependency> carDependencies = new LinkedHashSet<org.apache.geronimo.kernel.repository.Dependency>();
+ getDependencies(project);
+ processProject(dependencies, carDependencies, projectNode, useMavenDependencies.isUseTransitiveDependencies());
+ dependencies.removeAll(carDependencies);
}
return dependencies;
}
- private void processProject(LinkedHashSet<org.apache.geronimo.kernel.repository.Dependency> dependencies, List<org.apache.maven.model.Dependency> artifacts, DependencyTree.Node node, boolean useTransitiveDependencies) {
- List<DependencyTree.Node> includedNodes = node.getChildren();
- for (DependencyTree.Node childNode : includedNodes) {
+ private void processProject(LinkedHashSet<org.apache.geronimo.kernel.repository.Dependency> dependencies, LinkedHashSet<org.apache.geronimo.kernel.repository.Dependency> carDependencies, ProjectNode node, boolean useTransitiveDependencies) {
+ List<ProjectNode> includedNodes = node.getChildNodes();
+ for (ProjectNode childNode : includedNodes) {
org.apache.maven.artifact.Artifact artifact = childNode.getArtifact();
if (includeDependency(artifact)) {
- org.apache.geronimo.kernel.repository.Dependency gdep = toGeronimoDependency(artifact, useMavenDependencies.isIncludeVersion());
+ org.apache.geronimo.kernel.repository.Dependency gdep = toGeronimoDependency(dependencyMap.get(artifact), useMavenDependencies.isIncludeVersion());
dependencies.add(gdep);
- if (useTransitiveDependencies && !artifact.getType().equalsIgnoreCase("car")) {
- processProject(dependencies, artifacts, childNode, useTransitiveDependencies);
+ if (useTransitiveDependencies) {
+
+ if (artifact.getType().equalsIgnoreCase("car")) {
+ processProject(carDependencies, carDependencies, childNode, useTransitiveDependencies);
+ } else {
+ processProject(dependencies, carDependencies, childNode, useTransitiveDependencies);
+ }
}
}
}
Added: geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ProjectNode.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ProjectNode.java?rev=656537&view=auto
==============================================================================
--- geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ProjectNode.java (added)
+++ geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ProjectNode.java Thu May 15 01:11:09 2008
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.geronimo.mavenplugins.car;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+public class ProjectNode {
+
+
+ private final org.apache.maven.artifact.Artifact artifact;
+ private final List<ProjectNode> childNodes = new ArrayList<ProjectNode>();
+
+ public ProjectNode(Artifact artifact) {
+ this.artifact = artifact;
+ }
+
+ public void addChild(ProjectNode child) {
+ childNodes.add(child);
+ }
+
+ public List<ProjectNode> getChildNodes() {
+ return childNodes;
+ }
+
+ public Artifact getArtifact() {
+ return artifact;
+ }
+}
Propchange: geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ProjectNode.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ProjectNode.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ProjectNode.java
------------------------------------------------------------------------------
svn:mime-type = text/plain