Search in sources :

Example 11 with ArtifactKey

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);
    }
}
Also used : BundleStartLevel(org.eclipse.sisu.equinox.launching.BundleStartLevel) ArtifactKey(org.eclipse.tycho.ArtifactKey) IOException(java.io.IOException) Properties(java.util.Properties) LinkedHashMap(java.util.LinkedHashMap) ArtifactDescriptor(org.eclipse.tycho.ArtifactDescriptor) FileOutputStream(java.io.FileOutputStream) OsgiManifest(org.eclipse.tycho.core.osgitools.OsgiManifest) File(java.io.File)

Example 12 with ArtifactKey

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();
}
Also used : BundleStartLevel(org.eclipse.sisu.equinox.launching.BundleStartLevel) ArtifactKey(org.eclipse.tycho.ArtifactKey) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) File(java.io.File)

Example 13 with ArtifactKey

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"));
}
Also used : ArtifactKey(org.eclipse.tycho.ArtifactKey) Test(org.junit.Test)

Example 14 with ArtifactKey

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"));
}
Also used : ArtifactKey(org.eclipse.tycho.ArtifactKey) Test(org.junit.Test)

Example 15 with ArtifactKey

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"));
}
Also used : ArtifactKey(org.eclipse.tycho.ArtifactKey) Test(org.junit.Test)

Aggregations

ArtifactKey (org.eclipse.tycho.ArtifactKey)41 File (java.io.File)19 DefaultArtifactKey (org.eclipse.tycho.DefaultArtifactKey)15 Test (org.junit.Test)14 ArtifactDescriptor (org.eclipse.tycho.ArtifactDescriptor)13 ReactorProject (org.eclipse.tycho.ReactorProject)8 DefaultArtifactDescriptor (org.eclipse.tycho.core.osgitools.DefaultArtifactDescriptor)6 DefaultDependencyArtifacts (org.eclipse.tycho.core.osgitools.targetplatform.DefaultDependencyArtifacts)6 DefaultReactorProject (org.eclipse.tycho.core.osgitools.DefaultReactorProject)5 LinkedHashMap (java.util.LinkedHashMap)3 MavenProject (org.apache.maven.project.MavenProject)3 BundleStartLevel (org.eclipse.sisu.equinox.launching.BundleStartLevel)3 DependencyArtifacts (org.eclipse.tycho.artifacts.DependencyArtifacts)3 FeatureRef (org.eclipse.tycho.model.FeatureRef)3 PluginRef (org.eclipse.tycho.model.PluginRef)3 Version (org.osgi.framework.Version)3 Element (de.pdark.decentxml.Element)2 Map (java.util.Map)2 Artifact (org.apache.maven.artifact.Artifact)2 Dependency (org.apache.maven.model.Dependency)2