Author: djencks
Date: Wed Jul 27 07:04:25 2011
New Revision: 1151358
URL: http://svn.apache.org/viewvc?rev=1151358&view=rev
Log:
[KARAF-424] Improve the dependency selectors so that top level provided
dependencies are included by the DependencyHelper. So far this is only needed
by geronimo. My tests indicate this has not changed the behavior in karaf.
Modified:
karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/DependencyHelper.java
karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateDescriptorMojo.java
Modified:
karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/DependencyHelper.java
URL:
http://svn.apache.org/viewvc/karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/DependencyHelper.java?rev=1151358&r1=1151357&r2=1151358&view=diff
==============================================================================
---
karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/DependencyHelper.java
(original)
+++
karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/DependencyHelper.java
Wed Jul 27 07:04:25 2011
@@ -43,8 +43,8 @@ import org.sonatype.aether.graph.Depende
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.util.DefaultRepositorySystemSession;
import org.sonatype.aether.util.graph.selector.AndDependencySelector;
+import org.sonatype.aether.util.graph.selector.ExclusionDependencySelector;
import org.sonatype.aether.util.graph.selector.OptionalDependencySelector;
-import org.sonatype.aether.util.graph.selector.ScopeDependencySelector;
import
org.sonatype.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
import org.sonatype.aether.util.graph.transformer.ConflictMarker;
import org.sonatype.aether.util.graph.transformer.JavaDependencyContextRefiner;
@@ -92,8 +92,6 @@ public class DependencyHelper {
*/
private final List<RemoteRepository> pluginRepos;
- private boolean includeTopLevelProvidedScopeDependencies;
-
//dependencies we are interested in
protected Map<Artifact, String> localDependencies;
//log of what happened during search
@@ -101,12 +99,11 @@ public class DependencyHelper {
- public DependencyHelper(List<RemoteRepository> pluginRepos,
List<RemoteRepository> projectRepos, RepositorySystemSession repoSession,
RepositorySystem repoSystem, boolean includeTopLevelProvidedScopeDependencies) {
+ public DependencyHelper(List<RemoteRepository> pluginRepos,
List<RemoteRepository> projectRepos, RepositorySystemSession repoSession,
RepositorySystem repoSystem) {
this.pluginRepos = pluginRepos;
this.projectRepos = projectRepos;
this.repoSession = repoSession;
this.repoSystem = repoSystem;
- this.includeTopLevelProvidedScopeDependencies =
includeTopLevelProvidedScopeDependencies;
}
public Map<Artifact, String> getLocalDependencies() {
@@ -133,10 +130,9 @@ public class DependencyHelper {
try {
CollectRequest collectRequest = new CollectRequest(new
Dependency(artifact, "compile"), null, projectRepos);
DefaultRepositorySystemSession session = new
DefaultRepositorySystemSession(repoSession);
- if (includeTopLevelProvidedScopeDependencies) {
- session.setDependencySelector(new AndDependencySelector(new
OptionalDependencySelector(),
- new ScopeDependencySelectorProvider()));
- }
+ session.setDependencySelector(new AndDependencySelector(new
OptionalDependencySelector(),
+ new ScopeDependencySelector1(),
+ new ExclusionDependencySelector()));
DependencyGraphTransformer transformer = new
ChainedDependencyGraphTransformer(new ConflictMarker(),
new JavaEffectiveScopeCalculator(),
new JavaDependencyContextRefiner());
@@ -148,9 +144,12 @@ public class DependencyHelper {
}
}
- private static class ScopeDependencySelectorProvider implements
DependencySelector {
+ //aether's ScopeDependencySelector appears to always exclude the
configured scopes (test and provided) and there is no way to configure it to
+ //accept the top level provided scope dependencies. We need this 3 layer
cake since aether never actually uses the top level selector you give it,
+ //it always starts by getting the child to apply to the project's
dependencies.
+ private static class ScopeDependencySelector1 implements
DependencySelector {
- private DependencySelector child = new ScopeDependencySelector("test",
"provided");
+ private DependencySelector child = new ScopeDependencySelector2();
public boolean selectDependency(Dependency dependency) {
throw new IllegalStateException("this does not appear to be
called");
@@ -160,6 +159,33 @@ public class DependencyHelper {
return child;
}
}
+
+ private static class ScopeDependencySelector2 implements
DependencySelector {
+
+ private DependencySelector child = new ScopeDependencySelector3();
+
+ public boolean selectDependency(Dependency dependency) {
+ String scope = dependency.getScope();
+ return !"test".equals(scope);
+ }
+
+ public DependencySelector
deriveChildSelector(DependencyCollectionContext context) {
+ return child;
+ }
+ }
+
+ private static class ScopeDependencySelector3 implements
DependencySelector {
+
+ public boolean selectDependency(Dependency dependency) {
+ String scope = dependency.getScope();
+ return !"test".equals(scope) && !"provided".equals(scope);
+ }
+
+ public DependencySelector
deriveChildSelector(DependencyCollectionContext context) {
+ return this;
+ }
+ }
+
private static class Scanner {
private static enum Accept {
Modified:
karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateDescriptorMojo.java
URL:
http://svn.apache.org/viewvc/karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateDescriptorMojo.java?rev=1151358&r1=1151357&r2=1151358&view=diff
==============================================================================
---
karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateDescriptorMojo.java
(original)
+++
karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateDescriptorMojo.java
Wed Jul 27 07:04:25 2011
@@ -209,7 +209,7 @@ public class GenerateDescriptorMojo exte
public void execute() throws MojoExecutionException, MojoFailureException {
try {
- DependencyHelper dependencyHelper = new
DependencyHelper(pluginRepos, projectRepos, repoSession, repoSystem, false);
+ DependencyHelper dependencyHelper = new
DependencyHelper(pluginRepos, projectRepos, repoSession, repoSystem);
dependencyHelper.getDependencies(project, true);
this.localDependencies = dependencyHelper.getLocalDependencies();
this.treeListing = dependencyHelper.getTreeListing();