use of org.eclipse.tycho.ArtifactKey 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.ArtifactKey in project tycho by eclipse.
the class DefaultEquinoxInstallationFactory method toOsgiBundles.
protected String toOsgiBundles(Map<ArtifactKey, File> bundles, Map<String, BundleStartLevel> startLevel, BundleStartLevel defaultStartLevel) throws IOException {
log.debug("Installation OSGI bundles:");
StringBuilder result = new StringBuilder();
for (Map.Entry<ArtifactKey, File> entry : bundles.entrySet()) {
BundleStartLevel level = startLevel.get(entry.getKey().getId());
if (level != null && level.getLevel() == -1) {
// system bundle
continue;
}
if (result.length() > 0) {
result.append(",");
}
StringBuilder line = new StringBuilder();
line.append(appendAbsolutePath(entry.getValue()));
if (level != null) {
line.append('@');
if (level.getLevel() > 0) {
line.append(level.getLevel());
}
if (level.isAutoStart()) {
if (line.charAt(line.length() - 1) == '@') {
line.append("start");
} else {
line.append(":start");
}
}
} else {
if (defaultStartLevel.isAutoStart()) {
line.append("@start");
}
}
log.debug("\t" + line);
result.append(line.toString());
}
return result.toString();
}
use of org.eclipse.tycho.ArtifactKey in project tycho by eclipse.
the class TargetPlatformTest method testResolveLatestQualifierWithQualifierLiteral.
@Test
public void testResolveLatestQualifierWithQualifierLiteral() throws Exception {
ArtifactKey key = subject.resolveArtifact("eclipse-plugin", "some.bundle", "1.1.0.qualifier");
assertThat(key.getVersion(), is("1.1.0.v2014"));
}
use of org.eclipse.tycho.ArtifactKey in project tycho by eclipse.
the class TargetPlatformTest method testResolveLatestVersionThroughZeros.
@Test
public void testResolveLatestVersionThroughZeros() throws Exception {
ArtifactKey key = subject.resolveArtifact("eclipse-plugin", "some.bundle", "0.0.0");
assertThat(key.getVersion(), is("1.2.0"));
}
use of org.eclipse.tycho.ArtifactKey in project tycho by eclipse.
the class TargetPlatformTest method testResolveFixedVersionForThreeSegmentVersion.
@Test
public void testResolveFixedVersionForThreeSegmentVersion() throws Exception {
ArtifactKey key = subject.resolveArtifact("eclipse-plugin", "some.bundle", "1.1.0");
// three-segment versions don't have a special semantic in the PDE, so 1.1.0 doesn't resolve to 1.1.0.v2014 (cf. bug 373844)
assertThat(key.getVersion(), is("1.1.0"));
}
Aggregations