use of org.eclipse.tycho.ArtifactDescriptor in project tycho by eclipse.
the class TestMojo method createEclipseInstallation.
private EquinoxInstallation createEclipseInstallation() throws MojoExecutionException {
DependencyResolver platformResolver = dependencyResolverLocator.lookupDependencyResolver(project);
final List<Dependency> extraDependencies = getExtraDependencies();
List<ReactorProject> reactorProjects = getReactorProjects();
final DependencyResolverConfiguration resolverConfiguration = new DependencyResolverConfiguration() {
@Override
public OptionalResolutionAction getOptionalResolutionAction() {
return OptionalResolutionAction.IGNORE;
}
@Override
public List<Dependency> getExtraRequirements() {
return extraDependencies;
}
};
DependencyArtifacts testRuntimeArtifacts = platformResolver.resolveDependencies(session, project, null, reactorProjects, resolverConfiguration);
if (testRuntimeArtifacts == null) {
throw new MojoExecutionException("Cannot determinate build target platform location -- not executing tests");
}
work.mkdirs();
EquinoxInstallationDescription testRuntime = new DefaultEquinoxInstallationDescription();
testRuntime.setDefaultBundleStartLevel(defaultStartLevel);
testRuntime.addBundlesToExplode(getBundlesToExplode());
testRuntime.addFrameworkExtensions(getFrameworkExtensions());
if (bundleStartLevel != null) {
for (BundleStartLevel level : bundleStartLevel) {
testRuntime.addBundleStartLevel(level);
}
}
TestFrameworkProvider provider = providerHelper.selectProvider(getProjectType().getClasspath(project), getMergedProviderProperties(), providerHint);
createSurefireProperties(provider);
for (ArtifactDescriptor artifact : testRuntimeArtifacts.getArtifacts(ArtifactType.TYPE_ECLIPSE_PLUGIN)) {
// note that this project is added as directory structure rooted at project basedir.
// project classes and test-classes are added via dev.properties file (see #createDevProperties())
// all other projects are added as bundle jars.
ReactorProject otherProject = artifact.getMavenProject();
if (otherProject != null) {
if (otherProject.sameProject(project)) {
testRuntime.addBundle(artifact.getKey(), project.getBasedir());
continue;
}
File file = otherProject.getArtifact(artifact.getClassifier());
if (file != null) {
testRuntime.addBundle(artifact.getKey(), file);
continue;
}
}
testRuntime.addBundle(artifact);
}
Set<Artifact> testFrameworkBundles = providerHelper.filterTestFrameworkBundles(provider, pluginArtifacts);
for (Artifact artifact : testFrameworkBundles) {
DevBundleInfo devInfo = workspaceState.getBundleInfo(session, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), project.getPluginArtifactRepositories());
if (devInfo != null) {
testRuntime.addBundle(devInfo.getArtifactKey(), devInfo.getLocation(), true);
testRuntime.addDevEntries(devInfo.getSymbolicName(), devInfo.getDevEntries());
} else {
File bundleLocation = artifact.getFile();
ArtifactKey bundleArtifactKey = getBundleArtifactKey(bundleLocation);
testRuntime.addBundle(bundleArtifactKey, bundleLocation, true);
}
}
testRuntime.addDevEntries(getTestBundleSymbolicName(), getBuildOutputDirectories());
reportsDirectory.mkdirs();
return installationFactory.createInstallation(testRuntime, work);
}
use of org.eclipse.tycho.ArtifactDescriptor in project tycho by eclipse.
the class DefaultEquinoxInstallation method getLauncherJar.
@Override
public File getLauncherJar() {
ArtifactDescriptor systemBundle = description.getSystemBundle();
Version osgiVersion = Version.parseVersion(systemBundle.getKey().getVersion());
if (osgiVersion.compareTo(EquinoxInstallationDescription.EQUINOX_VERSION_3_3_0) < 0) {
throw new IllegalArgumentException("Eclipse 3.2 and earlier are not supported.");
// return new File(state.getTargetPlaform(), "startup.jar").getCanonicalFile();
} else {
// assume eclipse 3.3 or 3.4
ArtifactDescriptor launcher = description.getBundle(EquinoxInstallationDescription.EQUINOX_LAUNCHER, null);
if (launcher == null) {
throw new IllegalArgumentException("Could not find " + EquinoxInstallationDescription.EQUINOX_LAUNCHER + " bundle in the test runtime.");
}
try {
return launcher.getLocation().getCanonicalFile();
} catch (IOException e) {
return launcher.getLocation().getAbsoluteFile();
}
}
}
use of org.eclipse.tycho.ArtifactDescriptor in project tycho by eclipse.
the class DefaultEquinoxInstallationFactory method createInstallation.
@Override
public EquinoxInstallation createInstallation(EquinoxInstallationDescription description, File location) {
Set<String> bundlesToExplode = description.getBundlesToExplode();
List<File> frameworkExtensions = description.getFrameworkExtensions();
Map<String, BundleStartLevel> startLevel = description.getBundleStartLevel();
BundleStartLevel defaultBundleStartLevel = description.getDefaultBundleStartLevel();
if (defaultBundleStartLevel == null) {
defaultBundleStartLevel = new BundleStartLevel(null, 4, false);
}
Map<ArtifactKey, File> effective = new LinkedHashMap<>();
for (ArtifactDescriptor artifact : description.getBundles()) {
ArtifactKey key = artifact.getKey();
File file = artifact.getLocation();
OsgiManifest mf = manifestReader.loadManifest(file);
boolean directoryShape = bundlesToExplode.contains(key.getId()) || mf.isDirectoryShape();
if (!file.isDirectory() && directoryShape) {
String filename = key.getId() + "_" + key.getVersion();
File unpacked = new File(location, "plugins/" + filename);
unpacked.mkdirs();
unpack(file, unpacked);
effective.put(key, unpacked);
} else {
effective.put(key, file);
}
}
try {
location.mkdirs();
Properties p = new Properties();
p.putAll(description.getPlatformProperties());
String newOsgiBundles = toOsgiBundles(effective, startLevel, defaultBundleStartLevel);
p.setProperty("osgi.bundles", newOsgiBundles);
// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=234069
p.setProperty("osgi.bundlefile.limit", "100");
// @see SimpleConfiguratorConstants#PROP_KEY_EXCLUSIVE_INSTALLATION
// p.setProperty("org.eclipse.equinox.simpleconfigurator.exclusiveInstallation", "false");
p.setProperty("osgi.install.area", "file:" + location.getAbsolutePath().replace('\\', '/'));
p.setProperty("osgi.configuration.cascaded", "false");
p.setProperty("osgi.framework", "org.eclipse.osgi");
p.setProperty("osgi.bundles.defaultStartLevel", String.valueOf(defaultBundleStartLevel.getLevel()));
// fix osgi.framework
String url = p.getProperty("osgi.framework");
if (url != null) {
File file;
ArtifactDescriptor desc = description.getBundle(url, null);
if (desc != null) {
url = "file:" + desc.getLocation().getAbsolutePath().replace('\\', '/');
} else if (url.startsWith("file:")) {
String path = url.substring("file:".length());
file = new File(path);
if (!file.isAbsolute()) {
file = new File(location, path);
}
url = "file:" + file.getAbsolutePath().replace('\\', '/');
}
}
if (url != null) {
p.setProperty("osgi.framework", url);
}
if (!frameworkExtensions.isEmpty()) {
// see osgi.framework.extensions at http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fmisc%2Fruntime-options.html
Collection<String> bundleNames = unpackFrameworkExtensions(location, frameworkExtensions);
p.setProperty("osgi.framework", copySystemBundle(description, location));
p.setProperty("osgi.framework.extensions", StringUtils.join(bundleNames.iterator(), ","));
}
if (!description.getDevEntries().isEmpty()) {
p.put("osgi.dev", createDevProperties(location, description.getDevEntries()));
}
File configIni = new File(location, TychoConstants.CONFIG_INI_PATH);
File configurationLocation = configIni.getParentFile();
configurationLocation.mkdirs();
FileOutputStream fos = new FileOutputStream(configIni);
try {
p.store(fos, null);
} finally {
fos.close();
}
return new DefaultEquinoxInstallation(description, location, configurationLocation);
} catch (IOException e) {
throw new RuntimeException("Exception creating test eclipse runtime", e);
}
}
use of org.eclipse.tycho.ArtifactDescriptor in project tycho by eclipse.
the class DefaultEquinoxInstallationFactory method copySystemBundle.
private String copySystemBundle(EquinoxInstallationDescription description, File location) throws IOException {
ArtifactDescriptor bundle = description.getSystemBundle();
File srcFile = bundle.getLocation();
File dstFile = new File(location, "plugins/" + srcFile.getName());
FileUtils.copyFileIfModified(srcFile, dstFile);
return "file:" + dstFile.getAbsolutePath().replace('\\', '/');
}
use of org.eclipse.tycho.ArtifactDescriptor in project tycho by eclipse.
the class ArtifactCollection method getArtifact.
public ArtifactDescriptor getArtifact(String type, String id, String version) {
if (type == null || id == null) {
// TODO should we throw something instead?
return null;
}
// features with matching id, sorted by version, highest version first
SortedMap<Version, ArtifactDescriptor> relevantArtifacts = new TreeMap<>(new Comparator<Version>() {
@Override
public int compare(Version o1, Version o2) {
return -o1.compareTo(o2);
}
});
for (Map.Entry<ArtifactKey, ArtifactDescriptor> entry : this.artifacts.entrySet()) {
ArtifactKey key = entry.getKey();
if (type.equals(key.getType()) && id.equals(key.getId())) {
relevantArtifacts.put(Version.parseVersion(key.getVersion()), entry.getValue());
}
}
if (relevantArtifacts.isEmpty()) {
return null;
}
if (version == null) {
// latest version
return relevantArtifacts.get(relevantArtifacts.firstKey());
}
Version parsedVersion = new Version(version);
if (VERSION_0_0_0.equals(parsedVersion)) {
// latest version
return relevantArtifacts.get(relevantArtifacts.firstKey());
}
String qualifier = parsedVersion.getQualifier();
if (qualifier == null || "".equals(qualifier) || DependencyArtifacts.ANY_QUALIFIER.equals(qualifier)) {
// latest qualifier
for (Map.Entry<Version, ArtifactDescriptor> entry : relevantArtifacts.entrySet()) {
if (baseVersionEquals(parsedVersion, entry.getKey())) {
return entry.getValue();
}
}
}
// perfect match or nothing
return relevantArtifacts.get(parsedVersion);
}
Aggregations