List of usage examples for org.apache.maven.project MavenProject getContextValue
public Object getContextValue(String key)
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); } }