use of org.eclipse.tycho.artifacts.DependencyArtifacts in project tycho by eclipse.
the class ArtifactDependencyWalkerTest method walkProduct.
protected void walkProduct(String productFile, final ArrayList<PluginDescription> plugins, final ArrayList<FeatureDescription> features) throws Exception, IOException, XmlPullParserException {
DependencyArtifacts platform = getTargetPlatform();
final ProductConfiguration product = ProductConfiguration.read(new File(productFile));
ArtifactDependencyWalker walker = new AbstractArtifactDependencyWalker(platform) {
@Override
public void walk(ArtifactDependencyVisitor visitor) {
traverseProduct(product, visitor);
}
};
walker.walk(new ArtifactDependencyVisitor() {
@Override
public void visitPlugin(PluginDescription plugin) {
plugins.add(plugin);
}
@Override
public boolean visitFeature(FeatureDescription feature) {
features.add(feature);
return true;
}
});
}
use of org.eclipse.tycho.artifacts.DependencyArtifacts in project tycho by eclipse.
the class DependencyComputerTest method testWiringToPackageFromCustomProfile.
// TODO code reuse
@Test
public void testWiringToPackageFromCustomProfile() throws Exception {
File basedir = getBasedir("projects/customProfile");
Map<File, MavenProject> basedirMap = MavenSessionUtils.getBasedirMap(getSortedProjects(basedir, null));
MavenProject project = basedirMap.get(new File(basedir, "bundle"));
DependencyArtifacts platform = (DependencyArtifacts) project.getContextValue(TychoConstants.CTX_DEPENDENCY_ARTIFACTS);
CustomExecutionEnvironment customProfile = new CustomExecutionEnvironment("custom", Arrays.asList(//
new SystemCapability(Type.JAVA_PACKAGE, "package.historically.not.in.jdk", "1.2.1"), //
new SystemCapability(Type.OSGI_EE, "OSGi/Minimum", "1.0.0"), //
new SystemCapability(Type.OSGI_EE, "JavaSE", "1.0.0"), //
new SystemCapability(Type.OSGI_EE, "JavaSE", "1.1.0"), new SystemCapability(Type.OSGI_EE, "JavaSE", "1.2.0")));
State state = resolver.newResolvedState(project, customProfile, false, platform);
BundleDescription bundle = state.getBundleByLocation(project.getBasedir().getAbsolutePath());
List<DependencyEntry> dependencies = dependencyComputer.computeDependencies(state.getStateHelper(), bundle);
if (dependencies.size() > 0) {
assertThat(dependencies.size(), is(1));
assertThat(dependencies.get(0).desc.getSymbolicName(), is(Constants.SYSTEM_BUNDLE_SYMBOLICNAME));
}
}
use of org.eclipse.tycho.artifacts.DependencyArtifacts in project tycho by eclipse.
the class OsgiBundleProject method resolveClassPath.
@Override
public void resolveClassPath(MavenSession session, MavenProject project) {
DependencyArtifacts artifacts = getDependencyArtifacts(project);
State state = getResolverState(project, artifacts);
if (getLogger().isDebugEnabled() && DebugUtils.isDebugEnabled(session, project)) {
getLogger().debug(resolver.toDebugString(state));
}
BundleDescription bundleDescription = state.getBundleByLocation(project.getBasedir().getAbsolutePath());
List<ClasspathEntry> classpath = new ArrayList<>();
// project itself
ArtifactDescriptor artifact = getArtifact(artifacts, project.getBasedir(), bundleDescription.getSymbolicName());
ReactorProject projectProxy = DefaultReactorProject.adapt(project);
List<File> projectClasspath = getThisProjectClasspath(artifact, projectProxy);
classpath.add(new DefaultClasspathEntry(projectProxy, artifact.getKey(), projectClasspath, null));
// build.properties/jars.extra.classpath
addExtraClasspathEntries(classpath, projectProxy, artifacts);
// dependencies
List<AccessRule> strictBootClasspathAccessRules = new ArrayList<>();
strictBootClasspathAccessRules.add(new DefaultAccessRule("java/**", false));
for (DependencyEntry entry : dependencyComputer.computeDependencies(state.getStateHelper(), bundleDescription)) {
if (EquinoxResolver.SYSTEM_BUNDLE_ID == entry.desc.getBundleId()) {
if (entry.rules != null) {
strictBootClasspathAccessRules.addAll(entry.rules);
}
if (EquinoxResolver.SYSTEM_BUNDLE_SYMBOLIC_NAME.equals(entry.desc.getSymbolicName())) {
// synthetic system.bundle has no filesystem location
continue;
}
}
File location = new File(entry.desc.getLocation());
ArtifactDescriptor otherArtifact = getArtifact(artifacts, location, entry.desc.getSymbolicName());
ReactorProject otherProject = otherArtifact.getMavenProject();
List<File> locations;
if (otherProject != null) {
locations = getOtherProjectClasspath(otherArtifact, otherProject, null);
} else {
locations = getBundleClasspath(otherArtifact);
}
if (locations.isEmpty() && !entry.rules.isEmpty()) {
getLogger().warn("Empty classpath of required bundle " + otherArtifact);
}
classpath.add(new DefaultClasspathEntry(otherProject, otherArtifact.getKey(), locations, entry.rules));
}
project.setContextValue(TychoConstants.CTX_ECLIPSE_PLUGIN_CLASSPATH, classpath);
project.setContextValue(TychoConstants.CTX_ECLIPSE_PLUGIN_STRICT_BOOTCLASSPATH_ACCESSRULES, strictBootClasspathAccessRules);
project.setContextValue(TychoConstants.CTX_ECLIPSE_PLUGIN_BOOTCLASSPATH_EXTRA_ACCESSRULES, dependencyComputer.computeBootClasspathExtraAccessRules(state.getStateHelper(), bundleDescription));
addPDESourceRoots(project);
}
use of org.eclipse.tycho.artifacts.DependencyArtifacts in project tycho by eclipse.
the class DefaultTychoResolver method resolveProject.
@Override
public void resolveProject(MavenSession session, MavenProject project, List<ReactorProject> reactorProjects) {
AbstractTychoProject dr = (AbstractTychoProject) projectTypes.get(project.getPackaging());
if (dr == null) {
return;
}
DependencyResolver resolver = dependencyResolverLocator.lookupDependencyResolver(project);
logger.info("Computing target platform for " + project);
TargetPlatform preliminaryTargetPlatform = resolver.computePreliminaryTargetPlatform(session, project, reactorProjects);
TargetPlatformConfiguration configuration = TychoProjectUtils.getTargetPlatformConfiguration(project);
DependencyResolverConfiguration resolverConfiguration = configuration.getDependencyResolverConfiguration();
logger.info("Resolving dependencies of " + project);
DependencyArtifacts dependencyArtifacts = resolver.resolveDependencies(session, project, preliminaryTargetPlatform, reactorProjects, resolverConfiguration);
if (logger.isDebugEnabled() && DebugUtils.isDebugEnabled(session, project)) {
StringBuilder sb = new StringBuilder();
sb.append("Resolved target platform for ").append(project).append("\n");
dependencyArtifacts.toDebugString(sb, " ");
logger.debug(sb.toString());
}
dr.setDependencyArtifacts(session, project, dependencyArtifacts);
logger.info("Resolving class path of " + project);
dr.resolveClassPath(session, project);
resolver.injectDependenciesIntoMavenModel(project, dr, dependencyArtifacts, logger);
if (logger.isDebugEnabled() && DebugUtils.isDebugEnabled(session, project)) {
StringBuilder sb = new StringBuilder();
sb.append("Injected dependencies for ").append(project.toString()).append("\n");
for (Dependency dependency : project.getDependencies()) {
sb.append(" ").append(dependency.toString());
}
logger.debug(sb.toString());
}
}
use of org.eclipse.tycho.artifacts.DependencyArtifacts in project tycho by eclipse.
the class TychoTest method testMNGECLIPSE942.
public void testMNGECLIPSE942() throws Exception {
File basedir = getBasedir("projects/dummy");
File platformLocation = new File("src/test/resources/targetplatforms/MNGECLIPSE-942");
MavenProject project = getSortedProjects(basedir, platformLocation).get(0);
TychoProject projectType = lookup(TychoProject.class, project.getPackaging());
DependencyArtifacts platform = projectType.getDependencyArtifacts(project);
assertEquals(2, platform.getArtifacts(ArtifactType.TYPE_ECLIPSE_PLUGIN).size());
assertNotNull(platform.getArtifact(ArtifactType.TYPE_ECLIPSE_PLUGIN, "org.junit4.nl_ru", null));
}
Aggregations