/**
   * Returns <code>true</code> if the update should be applied.
   *
   * @param artifact The artifact.
   * @param currentVersion The current version of the artifact.
   * @param updateVersion The proposed new version of the artifact.
   * @return <code>true</code> if the update should be applied.
   * @since 1.0-alpha-1
   */
  protected boolean shouldApplyUpdate(
      Artifact artifact, String currentVersion, ArtifactVersion updateVersion) {
    getLog().debug("Proposal is to update from " + currentVersion + " to " + updateVersion);

    if (updateVersion == null) {
      getLog().warn("Not updating version: could not resolve any versions");
      return false;
    }

    artifact.setVersion(updateVersion.toString());
    try {
      resolver.resolveAlways(artifact, remoteArtifactRepositories, localRepository);
    } catch (ArtifactResolutionException e) {
      getLog().warn("Not updating version: could not resolve " + artifact.toString(), e);
      return false;
    } catch (ArtifactNotFoundException e) {
      getLog().warn("Not updating version: could not find " + artifact.toString(), e);
      return false;
    }

    if (currentVersion.equals(updateVersion.toString())) {
      getLog().info("Current version of " + artifact.toString() + " is the latest.");
      return false;
    }
    return true;
  }
 @Override
 public boolean accept(Artifact artifact) {
   for (Filter filter : filters) {
     if (filter.accept(artifact)) {
       return result(true, artifact.toString());
     }
   }
   return result(false, artifact.toString());
 }
 protected File getFile(String artifactName) {
   // artifactMap is a bit too simplistic
   for (Artifact artifact : project.getArtifacts())
     if (artifact.toString().startsWith(artifactName)) return artifact.getFile();
   throw new IllegalArgumentException(
       "could not find " + artifactName + " in " + project.getArtifacts());
 }
  /**
   * Detect if this artifact is already an osgi bundle. If it is, then we don't need to wrap it. The
   * best way to figure this out is to crack open the JAR and take a look at the manifest.
   *
   * @param artifact
   * @throws Exception
   */
  protected boolean isBundle(Artifact artifact) throws Exception {
    // Resolve the artifact.
    ArtifactResolutionRequest request = new ArtifactResolutionRequest().setArtifact(artifact);
    ArtifactResolutionResult result = repositorySystem.resolve(request);
    // If not found, then assume it's a reactor dependency and therefore should be a bundle.
    if (result.getArtifacts().isEmpty()) {
      getLog()
          .info(
              "Artifact "
                  + artifact.toString()
                  + " not found in local repository, assuming reactor dependency."); //$NON-NLS-1$
      // //$NON-NLS-2$
      return true;
    }
    artifact = result.getArtifacts().iterator().next();
    if (!artifact.getFile().isFile()) {
      throw new Exception(
          "Resolved artifact is not a file: "
              + artifact.getFile().getAbsolutePath()); // $NON-NLS-1$
    }

    // Crack open the dependency JAR, read the manifest, check for osgi attributes.
    JarFile jf = null;
    try {
      jf = new JarFile(artifact.getFile());
      Manifest manifest = jf.getManifest();
      if (manifest == null) {
        getLog()
            .info(
                "Artifact "
                    + artifact.toString()
                    + " missing a manifest!  Assuming not a bundle."); //$NON-NLS-1$ //$NON-NLS-2$
        return false;
      }
      Attributes attributes = manifest.getMainAttributes();
      if (attributes != null) {
        String value = attributes.getValue("Bundle-SymbolicName"); // $NON-NLS-1$
        if (value != null && value.trim().length() > 0) {
          return true;
        }
      }
    } finally {
      jf.close();
    }

    return false;
  }
 /**
  * Find unused artifacts.
  *
  * @param env Environment
  * @return Collection of unused artifacts
  */
 private static Collection<String> unused(final MavenEnvironment env) {
   final ProjectDependencyAnalysis analysis = DependenciesValidator.analyze(env);
   final Collection<String> unused = new LinkedList<String>();
   for (final Object obj : analysis.getUnusedDeclaredArtifacts()) {
     final Artifact artifact = (Artifact) obj;
     if (!artifact.getScope().equals(Artifact.SCOPE_COMPILE)) {
       continue;
     }
     unused.add(artifact.toString());
   }
   return unused;
 }
  Set<Artifact> getResolvedArtifactsFromUnresolvedDependencies(
      List<Dependency> unresolvedDependencies, boolean resolveTransitively)
      throws MojoExecutionException {
    final Set<Artifact> resolvedArtifacts = new HashSet<Artifact>();
    //    Artifact mojoArtifact = this.artifactFactory.createBuildArtifact(project.getGroupId(),
    // project.getArtifactId(), project.getVersion(), "pom");

    /*
     * Resolve each artifact.  This will get all transitive artifacts AND eliminate conflicts.
     */
    final Set<Artifact> unresolvedArtifacts;

    //    for (Dependency d : unresolvedDependencies)
    //      System.out.println("dependency: " + d.toString());

    try {
      unresolvedArtifacts =
          MavenMetadataSource.createArtifacts(
              this.artifactFactory, unresolvedDependencies, null, null, null);
      //      for (Artifact artifact : unresolvedArtifacts) {
      //        System.out.println("unresolved " + artifact.toString());
      //      }

      if (resolveTransitively) {
        ArtifactResolutionResult artifacts =
            artifactResolver.resolveTransitively(
                unresolvedArtifacts,
                project.getArtifact(),
                remoteRepositories,
                localRepository,
                artifactMetadataSource);
        resolvedArtifacts.addAll(artifacts.getArtifacts());
      } else {
        // resolve each artifact individually
        for (Artifact artifact : unresolvedArtifacts) {
          artifactResolver.resolve(artifact, remoteRepositories, localRepository);

          resolvedArtifacts.add(artifact);
        }
      }

    } catch (Exception e) {
      throw new MojoExecutionException("Unable to complete configuring the build settings", e);
    }

    for (Artifact artifact : resolvedArtifacts) {
      System.out.println("matched " + artifact.toString());
    }

    return resolvedArtifacts;
  }
Exemple #7
0
  /**
   * Allow the script to work with every JAR dependency of both the project and plugin, including
   * optional and provided dependencies. Runtime classpath elements are loaded first, so that legacy
   * behavior is not modified. Additional elements are added first in the order of project
   * artifacts, then in the order of plugin artifacts.
   */
  protected List getProjectClasspathElements() throws DependencyResolutionRequiredException {
    Set results = new LinkedHashSet();

    for (Iterator i = project.getRuntimeClasspathElements().iterator(); i.hasNext(); ) {
      String cpe = (String) i.next();
      try {
        results.add(new File(cpe).getCanonicalPath());
      } catch (IOException e) {
        throw new RuntimeException("Classpath element not found: " + cpe, e);
      }
    }

    for (Iterator i = project.getArtifacts().iterator(); i.hasNext(); ) {
      Artifact artifact = (Artifact) i.next();
      if (artifact.getType().equals("jar") && artifact.getClassifier() == null) {
        try {
          results.add(artifact.getFile().getCanonicalPath());
        } catch (IOException e) {
          throw new RuntimeException("Maven artifact file not found: " + artifact.toString(), e);
        }
      }
    }

    for (Iterator i = pluginArtifacts.iterator(); i.hasNext(); ) {
      Artifact artifact = (Artifact) i.next();
      if (artifact.getType().equals("jar") && artifact.getClassifier() == null) {
        try {
          results.add(artifact.getFile().getCanonicalPath());
        } catch (IOException e) {
          throw new RuntimeException(
              "Maven plugin-artifact file not found: " + artifact.toString(), e);
        }
      }
    }
    return new ArrayList(results);
  }
  private Set<File> getSurefirePlugins(String testFramework) throws MojoExecutionException {
    Set<File> result = new LinkedHashSet<File>();

    String fragment;
    if (TestFramework.TEST_JUNIT.equals(testFramework)) {
      fragment = "org.sonatype.tycho.surefire.junit";
    } else if (TestFramework.TEST_JUNIT4.equals(testFramework)) {
      fragment = "org.sonatype.tycho.surefire.junit4";
    } else {
      throw new IllegalArgumentException("Unsupported test framework " + testFramework);
    }

    for (Artifact artifact : pluginArtifacts) {
      if ("org.sonatype.tycho".equals(artifact.getGroupId())) {
        if ("org.sonatype.tycho.surefire.osgibooter".equals(artifact.getArtifactId())
            || fragment.equals(artifact.getArtifactId())) {
          result.add(artifact.getFile());
        }
      }
    }

    if (result.size() != 2) {
      StringBuilder sb =
          new StringBuilder(
              "Unable to locate org.sonatype.tycho:org.sonatype.tycho.surefire.osgibooter and/or its fragments\n");
      sb.append("Test framework: " + testFramework);
      sb.append("All plugin artifacts: ");
      for (Artifact artifact : pluginArtifacts) {
        sb.append("\n\t").append(artifact.toString());
      }
      sb.append("\nMatched OSGi test booter artifacts: ");
      for (File file : result) {
        sb.append("\n\t").append(file.getAbsolutePath());
      }

      throw new MojoExecutionException(sb.toString());
    }

    return result;
  }