Search in sources :

Example 6 with ArtifactDescriptor

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);
}
Also used : DependencyArtifacts(org.eclipse.tycho.artifacts.DependencyArtifacts) BundleStartLevel(org.eclipse.sisu.equinox.launching.BundleStartLevel) ArtifactKey(org.eclipse.tycho.ArtifactKey) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) ReactorProject(org.eclipse.tycho.ReactorProject) DefaultReactorProject(org.eclipse.tycho.core.osgitools.DefaultReactorProject) Dependency(org.apache.maven.model.Dependency) DependencyResolverConfiguration(org.eclipse.tycho.core.DependencyResolverConfiguration) Artifact(org.apache.maven.artifact.Artifact) DependencyResolver(org.eclipse.tycho.core.DependencyResolver) EquinoxInstallationDescription(org.eclipse.sisu.equinox.launching.EquinoxInstallationDescription) DefaultEquinoxInstallationDescription(org.eclipse.sisu.equinox.launching.DefaultEquinoxInstallationDescription) ArtifactDescriptor(org.eclipse.tycho.ArtifactDescriptor) DevBundleInfo(org.eclipse.tycho.dev.DevBundleInfo) DefaultEquinoxInstallationDescription(org.eclipse.sisu.equinox.launching.DefaultEquinoxInstallationDescription) TestFrameworkProvider(org.eclipse.tycho.surefire.provider.spi.TestFrameworkProvider) File(java.io.File)

Example 7 with ArtifactDescriptor

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();
        }
    }
}
Also used : ArtifactDescriptor(org.eclipse.tycho.ArtifactDescriptor) Version(org.osgi.framework.Version) IOException(java.io.IOException)

Example 8 with ArtifactDescriptor

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);
    }
}
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 9 with ArtifactDescriptor

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('\\', '/');
}
Also used : ArtifactDescriptor(org.eclipse.tycho.ArtifactDescriptor) File(java.io.File)

Example 10 with ArtifactDescriptor

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);
}
Also used : DefaultArtifactKey(org.eclipse.tycho.DefaultArtifactKey) ArtifactKey(org.eclipse.tycho.ArtifactKey) Version(org.osgi.framework.Version) DefaultArtifactDescriptor(org.eclipse.tycho.core.osgitools.DefaultArtifactDescriptor) ArtifactDescriptor(org.eclipse.tycho.ArtifactDescriptor) TreeMap(java.util.TreeMap) LinkedHashMap(java.util.LinkedHashMap) TreeMap(java.util.TreeMap) Map(java.util.Map) SortedMap(java.util.SortedMap)

Aggregations

ArtifactDescriptor (org.eclipse.tycho.ArtifactDescriptor)32 File (java.io.File)20 ArtifactKey (org.eclipse.tycho.ArtifactKey)13 ReactorProject (org.eclipse.tycho.ReactorProject)10 DependencyArtifacts (org.eclipse.tycho.artifacts.DependencyArtifacts)8 MojoExecutionException (org.apache.maven.plugin.MojoExecutionException)5 IOException (java.io.IOException)4 DefaultArtifactKey (org.eclipse.tycho.DefaultArtifactKey)4 DefaultArtifactDescriptor (org.eclipse.tycho.core.osgitools.DefaultArtifactDescriptor)4 DefaultReactorProject (org.eclipse.tycho.core.osgitools.DefaultReactorProject)4 ArrayList (java.util.ArrayList)3 LinkedHashMap (java.util.LinkedHashMap)3 PluginDescription (org.eclipse.tycho.core.PluginDescription)3 Version (org.osgi.framework.Version)3 FileOutputStream (java.io.FileOutputStream)2 HashSet (java.util.HashSet)2 LinkedHashSet (java.util.LinkedHashSet)2 Map (java.util.Map)2 Properties (java.util.Properties)2 ZipFile (java.util.zip.ZipFile)2