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
  private List<Artifact> resolveArtifacts(DependencyRequest dependencyRequest) {
    DependencyResult dependencyResult;
    try {
      dependencyResult =
          repositorySystem.resolveDependencies(repositorySystemSession, dependencyRequest);
    } catch (DependencyResolutionException e) {
      dependencyResult = e.getResult();
    }
    List<ArtifactResult> artifactResults = dependencyResult.getArtifactResults();
    List<Artifact> artifacts = new ArrayList<>(artifactResults.size());
    for (ArtifactResult artifactResult : artifactResults) {
      if (artifactResult.isMissing()) {
        artifacts.add(artifactResult.getRequest().getArtifact());
      } else {
        artifacts.add(artifactResult.getArtifact());
      }
    }

    return Collections.unmodifiableList(artifacts);
  }
예제 #5
0
  @Override
  public List<DependencyResource> resolveDependencies(
      Dependency dep, final List<DependencyRepository> repositories) {
    List<DependencyResource> result = new ArrayList<DependencyResource>();

    try {
      if (Strings.isNullOrEmpty(dep.getVersion())) {
        dep = DependencyBuilder.create(dep).setVersion("[,)");
      }

      RepositorySystem system = container.lookup(RepositorySystem.class);
      MavenRepositorySystemSession session = setupRepoSession(system);

      DefaultArtifact artifact = new DefaultArtifact(dep.toCoordinates());
      CollectRequest collectRequest =
          new CollectRequest(
              new org.sonatype.aether.graph.Dependency(artifact, null),
              convertToMavenRepos(repositories));
      DependencyRequest request = new DependencyRequest(collectRequest, null);

      DependencyResult artifacts = system.resolveDependencies(session, request);

      for (ArtifactResult a : artifacts.getArtifactResults()) {
        File file = a.getArtifact().getFile();
        Dependency d =
            DependencyBuilder.create()
                .setArtifactId(a.getArtifact().getArtifactId())
                .setGroupId(a.getArtifact().getGroupId())
                .setVersion(a.getArtifact().getVersion());
        DependencyResource resource = new DependencyResource(factory, file, d);
        result.add(resource);
      }
      return result;
    } catch (Exception e) {
      throw new ProjectModelException("Unable to resolve an artifact", e);
    }
  }
예제 #6
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());
  }
  @Override
  public BundleInformation installFromRepository(String featureId, boolean start) {

    org.apache.maven.repository.internal.DefaultServiceLocator locator =
        new org.apache.maven.repository.internal.DefaultServiceLocator();
    locator.addService(RepositoryConnectorFactory.class, WagonRepositoryConnectorFactory.class);
    locator.setServices(WagonProvider.class, new HttpWagonProvider());

    RepositorySystem system = locator.getService(RepositorySystem.class);

    // RepositorySystem system = null;
    try {
      // system = new DefaultPlexusContainer().lookup(RepositorySystem.class);

      MavenRepositorySystemSession mvnRepository = new MavenRepositorySystemSession();

      mvnRepository.setLocalRepositoryManager(
          system.newLocalRepositoryManager(
              new LocalRepository(System.getProperty("java.io.tmpdir") + "/repo")));

      CollectRequest collectRequest = new CollectRequest();
      collectRequest.setRoot(new Dependency(new DefaultArtifact(featureId), JavaScopes.RUNTIME));
      collectRequest.addRepository(
          new RemoteRepository(
              "central", "default", "http://nexus.motechproject.org/content/repositories/public"));

      DependencyRequest dependencyRequest =
          new DependencyRequest(
              collectRequest, DependencyFilterUtils.classpathFilter(JavaScopes.RUNTIME));

      BundleInformation bundleInformation = null;
      List<ArtifactResult> artifactResults =
          system.resolveDependencies(mvnRepository, dependencyRequest).getArtifactResults();

      List<Bundle> bundlesInstalled = new ArrayList<>();

      for (ArtifactResult artifact : artifactResults) {
        LOG.info("Installing " + artifact);
        final File bundleFile = artifact.getArtifact().getFile();
        FileInputStream fileInputStream = null;
        try {
          fileInputStream = new FileInputStream(bundleFile);
          final File bundleFileToInstall =
              bundleDirectoryManager.saveBundleStreamToFile(bundleFile.getName(), fileInputStream);
          final Bundle bundle = installBundleFromFile(bundleFileToInstall, false, false);
          if (bundle != null) {
            bundlesInstalled.add(bundle);
          }
        } finally {
          IOUtils.closeQuietly(fileInputStream);
        }
      }

      // start bundles after all bundles installed to avoid any dependency resolution problems.
      if (start) {
        for (Bundle bundle : bundlesInstalled) {
          if (!isFragmentBundle(bundle)) {
            bundle.start();
          }
        }
      }

      return bundleInformation;
    } catch (Exception e) {
      LOG.error("Error while installing bundle and dependencies " + featureId, e);
      throw new MotechException("Cannot install file", e);
    }
  }