/**
   * Add all libraries that don't have the scope "provided" to the "Bundle-Classpath".
   *
   * @throws MojoExecutionException
   */
  protected String addBundleClasspathEntries() throws MojoExecutionException {
    StringBuffer bundleClasspathSb = new StringBuffer(ENTRY_BUNDLE_CLASSPATH);

    // local classes, if the plugin is jarred
    // @todo handle expanded plugins
    bundleClasspathSb.append(" .");

    for (int j = 0; j < config.getDeps().length; j++) {
      IdeDependency dep = config.getDeps()[j];
      if (!dep.isProvided() && !dep.isReferencedProject() && !dep.isTestDependency()) {
        bundleClasspathSb.append("," + NEWLINE);

        log.debug("Adding artifact to manifest: " + dep.getArtifactId());

        bundleClasspathSb.append(" " + dep.getFile().getName());
      }
    }
    // only insert the name of the property if there are local libraries
    return bundleClasspathSb.toString();
  }
  private void addDependency(Properties ajdtSettings, IdeDependency dep, String propName, int index)
      throws MojoExecutionException {

    String path;

    if (dep.isReferencedProject() && !config.isPde()) {
      path = "/" + dep.getEclipseProjectName(); // $NON-NLS-1$
    } else if (dep.isReferencedProject() && config.isPde()) {
      // don't do anything, referenced projects are automatically handled by eclipse in PDE builds
      return;
    } else {
      File artifactPath = dep.getFile();

      if (artifactPath == null) {
        log.error(
            Messages.getString("EclipsePlugin.artifactpathisnull", dep.getId())); // $NON-NLS-1$
        return;
      }

      if (dep.isSystemScoped()) {
        path =
            IdeUtils.toRelativeAndFixSeparator(
                config.getEclipseProjectDirectory(), artifactPath, false);

        if (log.isDebugEnabled()) {
          log.debug(
              Messages.getString(
                  "EclipsePlugin.artifactissystemscoped", //$NON-NLS-1$
                  new Object[] {dep.getArtifactId(), path}));
        }
      } else {
        File localRepositoryFile = new File(config.getLocalRepository().getBasedir());

        // if the dependency is not provided and the plugin runs in "pde mode", the dependency is
        // added to the Bundle-Classpath:
        if (config.isPde() && (dep.isProvided() || dep.isOsgiBundle())) {
          return;
        } else if (config.isPde() && !dep.isProvided() && !dep.isTestDependency()) {
          // path for link created in .project, not to the actual file
          path = dep.getFile().getName();
        }
        // running in PDE mode and the dependency is provided means, that it is provided by
        // the target platform. This case is covered by adding the plugin container
        else {
          String fullPath = artifactPath.getPath();
          String relativePath =
              IdeUtils.toRelativeAndFixSeparator(localRepositoryFile, new File(fullPath), false);

          if (!new File(relativePath).isAbsolute()) {
            path =
                EclipseClasspathWriter.M2_REPO
                    + "/" //$NON-NLS-1$
                    + relativePath;
          } else {
            path = relativePath;
          }
        }
      }
    }

    ajdtSettings.setProperty(AJDT_PROP_PREFIX + propName + CONTENT_KIND + index, BINARY);
    ajdtSettings.setProperty(AJDT_PROP_PREFIX + propName + ENTRY_KIND + index, LIBRARY);
    ajdtSettings.setProperty(AJDT_PROP_PREFIX + propName + index, path);
  }