private Set<Artifact> processTransientDependencies(Dependency dependency, boolean sharedLibraries)
      throws MojoExecutionException {
    try {
      final Set<Artifact> artifacts = new LinkedHashSet<Artifact>();

      final CollectRequest collectRequest = new CollectRequest();

      collectRequest.setRoot(dependency);
      collectRequest.setRepositories(projectRepos);
      final DependencyNode node =
          repoSystem.collectDependencies(repoSession, collectRequest).getRoot();

      final DependencyRequest dependencyRequest =
          new DependencyRequest(
              node,
              new AndDependencyFilter(
                  new ScopeDependencyFilter(
                      Arrays.asList("compile", "runtime"), Arrays.asList("test")),
                  // Also exclude any optional dependencies
                  new DependencyFilter() {
                    @Override
                    public boolean accept(
                        DependencyNode dependencyNode, List<DependencyNode> dependencyNodes) {
                      return !dependencyNode.getDependency().isOptional();
                    }
                  }));

      repoSystem.resolveDependencies(repoSession, dependencyRequest);

      PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
      node.accept(nlg);

      final List<Dependency> dependencies = nlg.getDependencies(false);

      for (Dependency dep : dependencies) {
        final org.sonatype.aether.artifact.Artifact depAetherArtifact = dep.getArtifact();
        if (isNativeLibrary(sharedLibraries, depAetherArtifact.getExtension())) {
          final Artifact mavenArtifact =
              artifactFactory.createDependencyArtifact(
                  depAetherArtifact.getGroupId(),
                  depAetherArtifact.getArtifactId(),
                  VersionRange.createFromVersion(depAetherArtifact.getVersion()),
                  depAetherArtifact.getExtension(),
                  depAetherArtifact.getClassifier(),
                  dep.getScope());
          mavenArtifact.setFile(depAetherArtifact.getFile());
          artifacts.add(mavenArtifact);
        }
      }

      return artifacts;
    } catch (Exception e) {
      throw new MojoExecutionException("Error while processing transient dependencies", e);
    }
  }
  /** Verify operation manually. */
  public static void main(String[] args) throws Exception {

    final Logger log = logger();

    final RepositorySystem system = newSystem();

    final RepositorySystemSession session = newSession(system);

    // String uri = "jmock:jmock:pom:1.1.0";
    String uri = "org.apache.maven:maven-profile:2.2.1";

    final Artifact artifact = new DefaultArtifact(uri);

    final Dependency dependency = new Dependency(artifact, "compile");

    final RemoteRepository central = newRepoRemote();

    final CollectRequest collectRequest = new CollectRequest();
    collectRequest.setRoot(dependency);
    collectRequest.addRepository(central);

    final DependencyNode collectNode =
        system.collectDependencies(session, collectRequest).getRoot();

    final List<String> include = new ArrayList<String>();
    final List<String> exclude = new ArrayList<String>();

    final DependencyFilter filter = new ScopeDependencyFilter(include, exclude);

    final DependencyRequest dependencyRequest = new DependencyRequest(collectNode, filter);

    final DependencyResult result = system.resolveDependencies(session, dependencyRequest);

    final DependencyNode resolveNode = result.getRoot();

    final PreorderNodeListGenerator generator = new PreorderNodeListGenerator();

    resolveNode.accept(generator);

    final String[] pathArray = generator.getClassPath().split(File.pathSeparator);

    for (String path : pathArray) {
      log.info("path = " + path);
    }

    //

    final MavenProject project = newProject("org.apache.maven:maven-model:pom:3.0");

    log.info("project = " + project);
  }
  public static void main(String[] args) throws Exception {

    final String uri = "com.carrotgarden.osgi:carrot-osgi-anno-scr-make:jar:1.1.3";

    final Artifact artifact = new DefaultArtifact(uri);

    Dependency dependency = new Dependency(artifact, "compile");

    CollectRequest collectRequest = new CollectRequest(dependency, null);

    RepositorySystem system = UnitHelp.newSystem();

    MavenRepositorySystemSession session = UnitHelp.newSession(system);

    session.setOffline(true);

    Collection<String> scopeIncluded = new ArrayList<String>();
    Collection<String> scopeExcluded = new ArrayList<String>();

    scopeIncluded.add("provided");

    scopeExcluded.add("test");

    session.setDependencySelector( //
        new AndDependencySelector( //
            new OptionalDependencySelector(), //
            new ScopeDependencySelector(scopeIncluded, scopeExcluded), //
            new ExclusionDependencySelector()) //
        );

    CollectResult collectResult = system.collectDependencies(session, collectRequest);

    DependencyNode collectNode = collectResult.getRoot();

    final DependencyRequest dependencyRequest = new DependencyRequest(collectNode, null);

    final DependencyResult result = system.resolveDependencies(session, dependencyRequest);

    final DependencyNode resolveNode = result.getRoot();

    final PreorderNodeListGenerator generator = new PreorderNodeListGenerator();

    resolveNode.accept(generator);

    List<Artifact> list = generator.getArtifacts(true);

    for (Artifact item : list) {
      System.out.println("item = " + item);
    }
  }
예제 #4
0
  public void execute() throws MojoExecutionException, MojoFailureException {
    try {
      ArtifactDescriptorResult artifactDescriptor =
          repoSystem.readArtifactDescriptor(
              repoSession,
              new ArtifactDescriptorRequest(new DefaultArtifact(artifact), projectRepos, null));

      CollectRequest collectRequest = new CollectRequest();
      collectRequest.setDependencies(artifactDescriptor.getDependencies());
      collectRequest.setManagedDependencies(artifactDescriptor.getManagedDependencies());
      collectRequest.setRepositories(projectRepos);

      CollectResult dependencies = repoSystem.collectDependencies(repoSession, collectRequest);

      StringWriter writer = new StringWriter();
      NodeFormatter nodeFormatter =
          new DefaultNodeFormatter(artifactDescriptor.getArtifact().toString());
      dependencies
          .getRoot()
          .accept(
              new SerializingDependencyVisitor(
                  writer, SerializingDependencyVisitor.STANDARD_TOKENS, nodeFormatter));

      try {
        if (outputFile == null) {
          log(writer.toString(), getLog());
        } else {
          write(writer.toString(), outputFile);
          getLog().info("Wrote dependency tree to: " + outputFile);
        }
      } catch (IOException e) {
        throw new MojoExecutionException("Failed to write dependencies to file", e);
      }
    } catch (ArtifactDescriptorException e) {
      throw new MojoExecutionException("Failed to read artifact descriptor", e);
    } catch (DependencyCollectionException e) {
      throw new MojoExecutionException("Failed to collect dependencies", e);
    }
  }
예제 #5
0
  public AetherResult resolve(
      String groupId, String artifactId, String version, String extension, String classifier)
      throws PlexusContainerException, ComponentLookupException, DependencyCollectionException,
          ArtifactResolutionException, DependencyResolutionException {
    if (Strings.isBlank(extension) || extension.equals("bundle")) {
      extension = DEFAULT_EXTENSION;
    }
    if (classifier == null) {
      classifier = DEFAULT_CLASSIFIER;
    }

    RepositorySystemSession session = newSession();
    Dependency dependency =
        new Dependency(
            new DefaultArtifact(groupId, artifactId, classifier, extension, version), "runtime");

    CollectRequest collectRequest = new CollectRequest();
    collectRequest.setRoot(dependency);

    List<RemoteRepository> repos = getRemoteRepositories();
    RemoteRepository[] repoArray = new RemoteRepository[repos.size()];
    repos.toArray(repoArray);
    for (RemoteRepository repo : repoArray) {
      collectRequest.addRepository(repo);
    }
    RepositorySystem system = getRepositorySystem();
    DependencyNode rootNode = system.collectDependencies(session, collectRequest).getRoot();
    DependencyRequest dependencyRequest = new DependencyRequest();
    dependencyRequest.setRoot(rootNode);
    system.resolveDependencies(session, dependencyRequest);

    PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
    rootNode.accept(nlg);

    return new AetherResult(rootNode, nlg.getFiles(), nlg.getClassPath());
  }