Example usage for org.apache.maven.project MavenProject getContextValue

List of usage examples for org.apache.maven.project MavenProject getContextValue

Introduction

In this page you can find the example usage for org.apache.maven.project MavenProject getContextValue.

Prototype

public Object getContextValue(String key) 

Source Link

Document

Returns context value of this project associated with the given key or null if this project has no such value.

Usage

From source file:org.eclipse.tycho.core.osgitools.targetplatform.LocalTargetPlatformResolver.java

License:Open Source License

private void addDependencies(MavenSession session, MavenProject project, DefaultTargetPlatform platform) {
    TargetPlatformConfiguration configuration = (TargetPlatformConfiguration) project
            .getContextValue(TychoConstants.CTX_TARGET_PLATFORM_CONFIGURATION);

    if (configuration != null && TargetPlatformConfiguration.POM_DEPENDENCIES_CONSIDER
            .equals(configuration.getPomDependencies())) {
        Map<String, MavenProject> projectIds = new HashMap<String, MavenProject>(
                session.getProjects().size() * 2);
        // make a list of reactor projects
        for (MavenProject p : session.getProjects()) {
            String key = ArtifactUtils.key(p.getGroupId(), p.getArtifactId(), p.getVersion());
            projectIds.put(key, p);/*from  w  w w .  j a v a  2 s . c o  m*/
        }
        // handle dependencies that are in reactor
        for (Dependency dependency : project.getDependencies()) {
            if (Artifact.SCOPE_COMPILE.equals(dependency.getScope())) {
                String key = ArtifactUtils.key(dependency.getGroupId(), dependency.getArtifactId(),
                        dependency.getVersion());
                if (projectIds.containsKey(key)) {
                    MavenProject dependent = projectIds.get(key);
                    ArtifactKey artifactKey = getArtifactKey(session, dependent);
                    if (artifactKey != null) {
                        platform.removeAll(artifactKey.getType(), artifactKey.getId());
                        ReactorProject projectProxy = DefaultReactorProject.adapt(dependent);
                        platform.addReactorArtifact(artifactKey, projectProxy, null, null);
                        if (getLogger().isDebugEnabled()) {
                            getLogger().debug("Add Maven project " + artifactKey);
                        }
                    }
                }
            }
        }
        // handle rest of dependencies
        ArrayList<String> scopes = new ArrayList<String>();
        scopes.add(Artifact.SCOPE_COMPILE);
        Collection<Artifact> artifacts;
        try {
            artifacts = projectDependenciesResolver.resolve(project, scopes, session);
        } catch (MultipleArtifactsNotFoundException e) {
            Collection<Artifact> missing = new HashSet<Artifact>(e.getMissingArtifacts());

            for (Iterator<Artifact> it = missing.iterator(); it.hasNext();) {
                Artifact a = it.next();
                String key = ArtifactUtils.key(a.getGroupId(), a.getArtifactId(), a.getBaseVersion());
                if (projectIds.containsKey(key)) {
                    it.remove();
                }
            }

            if (!missing.isEmpty()) {
                throw new RuntimeException("Could not resolve project dependencies", e);
            }

            artifacts = e.getResolvedArtifacts();
            artifacts.removeAll(e.getMissingArtifacts());
        } catch (AbstractArtifactResolutionException e) {
            throw new RuntimeException("Could not resolve project dependencies", e);
        }
        for (Artifact artifact : artifacts) {
            String key = ArtifactUtils.key(artifact.getGroupId(), artifact.getArtifactId(),
                    artifact.getBaseVersion());
            if (!projectIds.containsKey(key)) {
                File plugin = artifact.getFile();
                ArtifactKey artifactKey = getArtifactKey(session, plugin);

                if (artifactKey != null) {
                    platform.addArtifactFile(artifactKey, plugin, null);
                    if (getLogger().isDebugEnabled()) {
                        getLogger().debug("Add Maven artifact " + artifactKey);
                    }
                }
            }
        }
    }
}

From source file:org.eclipse.tycho.core.resolver.DefaultDependencyResolverFactory.java

License:Open Source License

public DependencyResolver lookupDependencyResolver(MavenProject project) {
    Properties properties = (Properties) project.getContextValue(TychoConstants.CTX_MERGED_PROPERTIES);
    TargetPlatformConfiguration configuration = TychoProjectUtils.getTargetPlatformConfiguration(project);

    String property = properties.getProperty("tycho.targetPlatform");
    DependencyResolver resolver;//from  w  w  w .j  a  v a2s. c  om
    if (property != null) {
        logger.warn("-Dtycho.targetPlatform is deprecated and WILL be removed in the next Tycho version.");

        File location = new File(property);
        if (!location.exists() || !location.isDirectory()) {
            throw new RuntimeException("Invalid target platform location: " + property);
        }

        try {
            resolver = container.lookup(DependencyResolver.class, LocalDependencyResolver.ROLE_HINT);
        } catch (ComponentLookupException e) {
            throw new RuntimeException("Could not instantiate required component", e);
        }

        try {
            ((LocalDependencyResolver) resolver).setLocation(new File(property));
        } catch (IOException e) {
            throw new RuntimeException("Could not create target platform", e);
        }

        return resolver;
    }

    String resolverRole = configuration.getTargetPlatformResolver();
    if (resolverRole == null) {
        resolverRole = DEFAULT_RESOLVER_HINT;
    }

    try {
        resolver = container.lookup(DependencyResolver.class, resolverRole);
    } catch (ComponentLookupException e) {
        throw new RuntimeException("Could not instantiate required component", e);
    }

    return resolver;
}

From source file:org.eclipse.tycho.core.resolver.DefaultTargetPlatformConfigurationReader.java

License:Open Source License

public TargetPlatformConfiguration getTargetPlatformConfiguration(MavenSession session, MavenProject project) {
    TargetPlatformConfiguration result = new TargetPlatformConfiguration();

    // Use org.eclipse.tycho:target-platform-configuration/configuration/environment, if provided
    Plugin plugin = project.getPlugin("org.eclipse.tycho:target-platform-configuration");

    if (plugin != null) {
        Xpp3Dom configuration = (Xpp3Dom) plugin.getConfiguration();
        if (configuration != null) {
            if (logger.isDebugEnabled()) {
                logger.debug("target-platform-configuration for " + project.toString() + ":\n"
                        + configuration.toString());
            }/*  www  .  j av a 2  s  . co m*/

            addTargetEnvironments(result, project, configuration);

            setTargetPlatformResolver(result, configuration);

            setTarget(result, session, project, configuration);

            setPomDependencies(result, configuration);

            setAllowConflictingDependencies(result, configuration);

            setDisableP2Mirrors(result, configuration);

            setExecutionEnvironment(result, configuration);

            readFilters(result, configuration);

            readExtraRequirements(result, configuration);

            setOptionalDependencies(result, configuration);
        }
    }

    if (result.getEnvironments().isEmpty()) {
        TychoProject projectType = projectTypes.get(project.getPackaging());
        if (projectType != null) {
            TargetEnvironment env = projectType.getImplicitTargetEnvironment(project);
            if (env != null) {
                if (logger.isDebugEnabled()) {
                    logger.debug(
                            "Implicit target environment for " + project.toString() + ": " + env.toString());
                }

                result.addEnvironment(env);
            }
        }
    }

    if (result.getEnvironments().isEmpty()) {
        // applying defaults
        logger.warn("No explicit target runtime environment configuration. Build is platform dependent.");

        // Otherwise, use project or execution properties, if provided
        Properties properties = (Properties) project.getContextValue(TychoConstants.CTX_MERGED_PROPERTIES);

        // Otherwise, use current system os/ws/nl/arch
        String os = PlatformPropertiesUtils.getOS(properties);
        String ws = PlatformPropertiesUtils.getWS(properties);
        String arch = PlatformPropertiesUtils.getArch(properties);

        result.addEnvironment(new TargetEnvironment(os, ws, arch, null /* nl */));

        result.setImplicitTargetEnvironment(true);
    } else {
        result.setImplicitTargetEnvironment(false);
    }

    return result;
}

From source file:org.eclipse.tycho.core.resolver.DefaultTargetPlatformResolverFactory.java

License:Open Source License

public TargetPlatformResolver lookupPlatformResolver(MavenProject project) {
    Properties properties = (Properties) project.getContextValue(TychoConstants.CTX_MERGED_PROPERTIES);
    TargetPlatformConfiguration configuration = TychoProjectUtils.getTargetPlatformConfiguration(project);

    String property = properties.getProperty("tycho.targetPlatform");
    TargetPlatformResolver resolver;//from   www.  j a  va  2  s. c  o  m
    if (property != null) {
        logger.warn("-Dtycho.targetPlatform is deprecated and WILL be removed in the next Tycho version.");

        File location = new File(property);
        if (!location.exists() || !location.isDirectory()) {
            throw new RuntimeException("Invalid target platform location: " + property);
        }

        try {
            resolver = container.lookup(TargetPlatformResolver.class, LocalTargetPlatformResolver.ROLE_HINT);
        } catch (ComponentLookupException e) {
            throw new RuntimeException("Could not instantiate required component", e);
        }

        try {
            ((LocalTargetPlatformResolver) resolver).setLocation(new File(property));
        } catch (IOException e) {
            throw new RuntimeException("Could not create target platform", e);
        }

        return resolver;
    }

    String resolverRole = configuration.getTargetPlatformResolver();
    if (resolverRole == null) {
        resolverRole = DEFAULT_RESOLVER_HINT;
    }

    try {
        resolver = container.lookup(TargetPlatformResolver.class, resolverRole);
    } catch (ComponentLookupException e) {
        throw new RuntimeException("Could not instantiate required component", e);
    }

    return resolver;
}

From source file:org.eclipse.tycho.core.resolver.DefaultTychoResolver.java

License:Open Source License

@Override
public void setupProject(MavenSession session, MavenProject project, ReactorProject reactorProject) {
    AbstractTychoProject dr = (AbstractTychoProject) projectTypes.get(project.getPackaging());
    if (dr == null) {
        return;//from   w ww .  j av  a2  s.c om
    }

    // skip if setup was already done
    if (project.getContextValue(TychoConstants.CTX_MERGED_PROPERTIES) != null) {
        return;
    }

    // generic Eclipse/OSGi metadata

    dr.setupProject(session, project);

    // p2 metadata

    Properties properties = new Properties();
    properties.putAll(project.getProperties());
    properties.putAll(session.getSystemProperties()); // session wins
    properties.putAll(session.getUserProperties());
    project.setContextValue(TychoConstants.CTX_MERGED_PROPERTIES, properties);

    setTychoEnvironmentProperties(properties, project);

    TargetPlatformConfiguration configuration = configurationReader.getTargetPlatformConfiguration(session,
            project);
    project.setContextValue(TychoConstants.CTX_TARGET_PLATFORM_CONFIGURATION, configuration);

    ExecutionEnvironmentConfiguration eeConfiguration = new ExecutionEnvironmentConfigurationImpl(logger,
            !configuration.isResolveWithEEConstraints());
    dr.readExecutionEnvironmentConfiguration(project, eeConfiguration);
    project.setContextValue(TychoConstants.CTX_EXECUTION_ENVIRONMENT_CONFIGURATION, eeConfiguration);

    DependencyResolver resolver = dependencyResolverLocator.lookupDependencyResolver(project);
    resolver.setupProjects(session, project, reactorProject);
}

From source file:org.eclipse.tycho.core.utils.TychoProjectUtils.java

License:Open Source License

/**
 * Returns the {@link DependencyArtifacts} instance associated with the given project.
 * //from  w ww.ja v a2  s .co  m
 * @param project
 *            a Tycho project
 * @return the resolved dependencies of the given project; never <code>null</code>
 * @throws IllegalStateException
 *             if the given project does not have the resolved project dependencies stored
 */
public static DependencyArtifacts getDependencyArtifacts(MavenProject project) throws IllegalStateException {
    DependencyArtifacts resolvedDependencies = (DependencyArtifacts) project
            .getContextValue(TychoConstants.CTX_DEPENDENCY_ARTIFACTS);
    if (resolvedDependencies == null) {
        throw new IllegalStateException(TYCHO_NOT_CONFIGURED + project.toString());
    }
    return resolvedDependencies;
}

From source file:org.eclipse.tycho.core.utils.TychoProjectUtils.java

License:Open Source License

/**
 * Returns the {@link TargetPlatformConfiguration} instance associated with the given project.
 * /*  w w w . j a  v a 2 s  .  co m*/
 * @param project
 *            a Tycho project
 * @return the target platform configuration for the given project; never <code>null</code>
 * @throws IllegalStateException
 *             if the given project does not have an associated target platform configuration
 */
public static TargetPlatformConfiguration getTargetPlatformConfiguration(MavenProject project)
        throws IllegalStateException {
    TargetPlatformConfiguration targetPlatformConfiguration = (TargetPlatformConfiguration) project
            .getContextValue(TychoConstants.CTX_TARGET_PLATFORM_CONFIGURATION);
    if (targetPlatformConfiguration == null) {
        throw new IllegalStateException(TYCHO_NOT_CONFIGURED + project.toString());
    }
    return targetPlatformConfiguration;
}

From source file:org.eclipse.tycho.core.utils.TychoProjectUtils.java

License:Open Source License

public static TargetPlatform getTargetPlatform(MavenProject project) {
    TargetPlatform targetPlatform = (TargetPlatform) project
            .getContextValue(TychoConstants.CTX_TARGET_PLATFORM);
    if (targetPlatform == null) {
        throw new IllegalStateException(TYCHO_NOT_CONFIGURED + project.toString());
    }//from  w w  w . j a va  2 s .c  o  m
    return targetPlatform;
}

From source file:org.eclipse.tycho.p2.facade.P2TargetPlatformResolver.java

License:Open Source License

public void setupProjects(MavenSession session, MavenProject project, ReactorProject reactorProject) {
    TargetPlatformConfiguration configuration = (TargetPlatformConfiguration) project
            .getContextValue(TychoConstants.CTX_TARGET_PLATFORM_CONFIGURATION);
    List<Map<String, String>> environments = getEnvironments(configuration);
    Set<Object> metadata = generator.generateMetadata(new ReactorArtifactFacade(reactorProject, null),
            environments);/* w  w  w  .ja v a  2s. c om*/
    reactorProject.setDependencyMetadata(null, metadata);

    // TODO this should be moved to osgi-sources-plugin somehow
    if (isBundleProject(project) && hasSourceBundle(project)) {
        ReactorArtifactFacade sourcesArtifact = new ReactorArtifactFacade(reactorProject, "sources");
        Set<Object> sourcesMetadata = sourcesGenerator.generateMetadata(sourcesArtifact, environments);
        reactorProject.setDependencyMetadata(sourcesArtifact.getClassidier(), sourcesMetadata);
    }
}

From source file:org.eclipse.tycho.p2.facade.P2TargetPlatformResolver.java

License:Open Source License

protected TargetPlatform doResolvePlatform(final MavenSession session, final MavenProject project,
        List<ReactorProject> reactorProjects, List<Dependency> dependencies, P2Resolver resolver) {
    TargetPlatformConfiguration configuration = (TargetPlatformConfiguration) project
            .getContextValue(TychoConstants.CTX_TARGET_PLATFORM_CONFIGURATION);

    resolver.setRepositoryCache(repositoryCache);

    resolver.setOffline(session.isOffline());

    resolver.setLogger(new P2Logger() {
        public void debug(String message) {
            if (message != null && message.length() > 0) {
                getLogger().info(message); // TODO
            }/* w ww  .ja  va2  s . co m*/
        }

        public void info(String message) {
            if (message != null && message.length() > 0) {
                getLogger().info(message);
            }
        }

        public boolean isDebugEnabled() {
            return getLogger().isDebugEnabled() && DebugUtils.isDebugEnabled(session, project);
        }
    });

    Map<File, ReactorProject> projects = new HashMap<File, ReactorProject>();

    resolver.setLocalRepositoryLocation(new File(session.getLocalRepository().getBasedir()));

    resolver.setEnvironments(getEnvironments(configuration));

    for (ReactorProject otherProject : reactorProjects) {
        if (getLogger().isDebugEnabled()) {
            getLogger().debug("P2resolver.addMavenProject " + otherProject.getId());
        }
        projects.put(otherProject.getBasedir(), otherProject);
        resolver.addReactorArtifact(new ReactorArtifactFacade(otherProject, null));

        Map<String, Set<Object>> dependencyMetadata = otherProject.getDependencyMetadata();
        if (dependencyMetadata != null) {
            for (String classifier : dependencyMetadata.keySet()) {
                resolver.addReactorArtifact(new ReactorArtifactFacade(otherProject, classifier));
            }
        }
    }

    if (dependencies != null) {
        for (Dependency dependency : dependencies) {
            resolver.addDependency(dependency.getType(), dependency.getArtifactId(), dependency.getVersion());
        }
    }

    if (TargetPlatformConfiguration.POM_DEPENDENCIES_CONSIDER.equals(configuration.getPomDependencies())) {
        Set<String> projectIds = new HashSet<String>();
        for (ReactorProject p : reactorProjects) {
            String key = ArtifactUtils.key(p.getGroupId(), p.getArtifactId(), p.getVersion());
            projectIds.add(key);
        }

        ArrayList<String> scopes = new ArrayList<String>();
        scopes.add(Artifact.SCOPE_COMPILE);
        Collection<Artifact> artifacts;
        try {
            artifacts = projectDependenciesResolver.resolve(project, scopes, session);
        } catch (MultipleArtifactsNotFoundException e) {
            Collection<Artifact> missing = new HashSet<Artifact>(e.getMissingArtifacts());

            for (Iterator<Artifact> it = missing.iterator(); it.hasNext();) {
                Artifact a = it.next();
                String key = ArtifactUtils.key(a.getGroupId(), a.getArtifactId(), a.getBaseVersion());
                if (projectIds.contains(key)) {
                    it.remove();
                }
            }

            if (!missing.isEmpty()) {
                throw new RuntimeException("Could not resolve project dependencies", e);
            }

            artifacts = e.getResolvedArtifacts();
            artifacts.removeAll(e.getMissingArtifacts());
        } catch (AbstractArtifactResolutionException e) {
            throw new RuntimeException("Could not resolve project dependencies", e);
        }
        List<Artifact> externalArtifacts = new ArrayList<Artifact>(artifacts.size());
        for (Artifact artifact : artifacts) {
            String key = ArtifactUtils.key(artifact.getGroupId(), artifact.getArtifactId(),
                    artifact.getBaseVersion());
            if (projectIds.contains(key)) {
                // resolved to an older snapshot from the repo, we only want the current project in the reactor
                continue;
            }
            externalArtifacts.add(artifact);
        }
        addToP2ViewOfLocalRepository(session, externalArtifacts, project);
        for (Artifact artifact : externalArtifacts) {
            /*
             * TODO This call generates p2 metadata for the POM dependencies. If the artifact
             * has an attached p2metadata.xml, we should reuse that metadata.
             */
            /*
             * TODO The generated metadata is "depencency only" metadata. (Just by coincidence
             * this is currently full metadata.) Since this POM depencency metadata may be
             * copied into an eclipse-repository or p2-enabled RCP installation, it shall be
             * documented that the generated metadata must be full metadata.
             */
            if (getLogger().isDebugEnabled()) {
                getLogger().debug("P2resolver.addMavenArtifact " + artifact.toString());
            }
            resolver.addMavenArtifact(new ArtifactFacade(artifact));
        }
    }

    for (ArtifactRepository repository : project.getRemoteArtifactRepositories()) {
        try {
            URI uri = new URL(repository.getUrl()).toURI();

            if (repository.getLayout() instanceof P2ArtifactRepositoryLayout) {
                if (session.isOffline()) {
                    getLogger().debug("Offline mode, using local cache only for repository "
                            + repository.getId() + " (" + repository.getUrl() + ")");
                }

                try {
                    Authentication auth = repository.getAuthentication();
                    if (auth != null) {
                        resolver.setCredentials(uri, auth.getUsername(), auth.getPassword());
                    }

                    resolver.addP2Repository(uri);

                    getLogger().debug(
                            "Added p2 repository " + repository.getId() + " (" + repository.getUrl() + ")");
                } catch (Exception e) {
                    String msg = "Failed to access p2 repository " + repository.getId() + " ("
                            + repository.getUrl() + "), will try to use local cache. Reason: " + e.getMessage();
                    if (getLogger().isDebugEnabled()) {
                        getLogger().warn(msg, e);
                    } else {
                        getLogger().warn(msg);
                    }
                }
            } else {
                if (!configuration.isIgnoreTychoRepositories() && !session.isOffline()) {
                    try {
                        MavenRepositoryReader reader = plexus.lookup(MavenRepositoryReader.class);
                        reader.setArtifactRepository(repository);
                        reader.setLocalRepository(session.getLocalRepository());

                        String repositoryKey = getRepositoryKey(repository);
                        TychoRepositoryIndex index = repositoryCache.getRepositoryIndex(repositoryKey);
                        if (index == null) {
                            index = new DefaultTychoRepositoryIndex(reader);

                            repositoryCache.putRepositoryIndex(repositoryKey, index);
                        }

                        resolver.addMavenRepository(uri, index, reader);
                        getLogger().debug("Added Maven repository " + repository.getId() + " ("
                                + repository.getUrl() + ")");
                    } catch (FileNotFoundException e) {
                        // it happens
                    } catch (Exception e) {
                        getLogger().debug("Unable to initialize remote Tycho repository", e);
                    }
                } else {
                    String msg = "Ignoring Maven repository " + repository.getId() + " (" + repository.getUrl()
                            + ")";
                    if (session.isOffline()) {
                        msg += " while in offline mode";
                    }
                    getLogger().debug(msg);
                }
            }
        } catch (MalformedURLException e) {
            getLogger().warn("Could not parse repository URL", e);
        } catch (URISyntaxException e) {
            getLogger().warn("Could not parse repository URL", e);
        }
    }

    Target target = configuration.getTarget();

    if (target != null) {
        Set<URI> uris = new HashSet<URI>();

        for (Target.Location location : target.getLocations()) {
            String type = location.getType();
            if (!"InstallableUnit".equalsIgnoreCase(type)) {
                getLogger().warn("Target location type: " + type + " is not supported");
                continue;
            }
            for (Target.Repository repository : location.getRepositories()) {

                try {
                    URI uri = new URI(getMirror(repository, session.getRequest().getMirrors()));
                    if (uris.add(uri)) {
                        if (session.isOffline()) {
                            getLogger().debug("Ignored repository " + uri + " while in offline mode");
                        } else {
                            String id = repository.getId();
                            if (id != null) {
                                Server server = session.getSettings().getServer(id);

                                if (server != null) {
                                    resolver.setCredentials(uri, server.getUsername(), server.getPassword());
                                } else {
                                    getLogger().info("Unknown server id=" + id + " for repository location="
                                            + repository.getLocation());
                                }
                            }

                            try {
                                resolver.addP2Repository(uri);
                            } catch (Exception e) {
                                String msg = "Failed to access p2 repository " + uri
                                        + ", will try to use local cache. Reason: " + e.getMessage();
                                if (getLogger().isDebugEnabled()) {
                                    getLogger().warn(msg, e);
                                } else {
                                    getLogger().warn(msg);
                                }
                            }
                        }
                    }
                } catch (URISyntaxException e) {
                    getLogger().debug("Could not parse repository URL", e);
                }
            }

            for (Target.Unit unit : location.getUnits()) {
                String versionRange;
                if ("0.0.0".equals(unit.getVersion())) {
                    versionRange = unit.getVersion();
                } else {
                    // perfect version match
                    versionRange = "[" + unit.getVersion() + "," + unit.getVersion() + "]";
                }
                resolver.addDependency(P2Resolver.TYPE_INSTALLABLE_UNIT, unit.getId(), versionRange);
            }
        }
    }

    if (!isAllowConflictingDependencies(project, configuration)) {
        List<P2ResolutionResult> results = resolver.resolveProject(project.getBasedir());

        MultiEnvironmentTargetPlatform multiPlatform = new MultiEnvironmentTargetPlatform();

        // FIXME this is just wrong
        for (int i = 0; i < configuration.getEnvironments().size(); i++) {
            TargetEnvironment environment = configuration.getEnvironments().get(i);
            P2ResolutionResult result = results.get(i);

            DefaultTargetPlatform platform = newDefaultTargetPlatform(session, projects, result);

            // addProjects( session, platform );

            multiPlatform.addPlatform(environment, platform);
        }

        return multiPlatform;
    } else {
        P2ResolutionResult result = resolver.collectProjectDependencies(project.getBasedir());

        return newDefaultTargetPlatform(session, projects, result);
    }
}