Search in sources :

Example 1 with PluginInfo

use of org.sonar.core.platform.PluginInfo in project sonarqube by SonarSource.

the class CePluginJarExploderTest method explode_jar_to_temp_directory.

@Test
public void explode_jar_to_temp_directory() throws Exception {
    PluginInfo info = PluginInfo.create(plugin1Jar());
    ExplodedPlugin exploded = underTest.explode(info);
    // all the files loaded by classloaders (JAR + META-INF/libs/*.jar) are copied to a dedicated temp directory
    File copiedJar = exploded.getMain();
    assertThat(exploded.getKey()).isEqualTo("test");
    assertThat(copiedJar).isFile().exists();
    assertThat(copiedJar.getParentFile()).isDirectory().hasName("test");
    assertThat(copiedJar.getParentFile().getParentFile()).isDirectory().hasName("ce-exploded-plugins");
}
Also used : PluginInfo(org.sonar.core.platform.PluginInfo) ExplodedPlugin(org.sonar.core.platform.ExplodedPlugin) File(java.io.File) Test(org.junit.Test)

Example 2 with PluginInfo

use of org.sonar.core.platform.PluginInfo in project sonarqube by SonarSource.

the class CePluginJarExploderTest method explode_is_reentrant.

@Test
public void explode_is_reentrant() throws Exception {
    PluginInfo info = PluginInfo.create(plugin1Jar());
    ExplodedPlugin exploded1 = underTest.explode(info);
    long dirSize1 = sizeOfDirectory(exploded1.getMain().getParentFile());
    ExplodedPlugin exploded2 = underTest.explode(info);
    long dirSize2 = sizeOfDirectory(exploded2.getMain().getParentFile());
    assertThat(exploded2.getMain().getCanonicalPath()).isEqualTo(exploded1.getMain().getCanonicalPath());
    assertThat(dirSize1).isEqualTo(dirSize2);
}
Also used : PluginInfo(org.sonar.core.platform.PluginInfo) ExplodedPlugin(org.sonar.core.platform.ExplodedPlugin) Test(org.junit.Test)

Example 3 with PluginInfo

use of org.sonar.core.platform.PluginInfo in project sonarqube by SonarSource.

the class CePluginRepository method start.

@Override
public void start() {
    Loggers.get(getClass()).info("Load plugins");
    for (File file : listJarFiles(fs.getInstalledPluginsDir())) {
        PluginInfo info = PluginInfo.create(file);
        pluginInfosByKeys.put(info.getKey(), info);
    }
    pluginInstancesByKeys.putAll(loader.load(pluginInfosByKeys));
    started.set(true);
}
Also used : PluginInfo(org.sonar.core.platform.PluginInfo) File(java.io.File)

Example 4 with PluginInfo

use of org.sonar.core.platform.PluginInfo in project sonarqube by SonarSource.

the class PluginsMonitor method attributes.

@Override
public Map<String, Object> attributes() {
    Map<String, Object> attributes = new LinkedHashMap<>();
    for (PluginInfo plugin : repository.getPluginInfos()) {
        LinkedHashMap<String, Object> pluginAttributes = new LinkedHashMap<>();
        pluginAttributes.put("Name", plugin.getName());
        Version version = plugin.getVersion();
        if (version != null) {
            pluginAttributes.put("Version", version.getName());
        }
        attributes.put(plugin.getKey(), pluginAttributes);
    }
    return attributes;
}
Also used : Version(org.sonar.updatecenter.common.Version) PluginInfo(org.sonar.core.platform.PluginInfo) LinkedHashMap(java.util.LinkedHashMap)

Example 5 with PluginInfo

use of org.sonar.core.platform.PluginInfo in project sonarqube by SonarSource.

the class ServerExtensionInstaller method installExtensions.

public void installExtensions(ComponentContainer container) {
    ListMultimap<PluginInfo, Object> installedExtensionsByPlugin = ArrayListMultimap.create();
    for (PluginInfo pluginInfo : pluginRepository.getPluginInfos()) {
        try {
            String pluginKey = pluginInfo.getKey();
            Plugin plugin = pluginRepository.getPluginInstance(pluginKey);
            container.addExtension(pluginInfo, plugin);
            Plugin.Context context = new Plugin.Context(sonarRuntime);
            plugin.define(context);
            for (Object extension : context.getExtensions()) {
                if (installExtension(container, pluginInfo, extension, true) != null) {
                    installedExtensionsByPlugin.put(pluginInfo, extension);
                } else {
                    container.declareExtension(pluginInfo, extension);
                }
            }
        } catch (Throwable e) {
            // catch Throwable because we want to catch Error too (IncompatibleClassChangeError, ...)
            throw new IllegalStateException(String.format("Fail to load plugin %s [%s]", pluginInfo.getName(), pluginInfo.getKey()), e);
        }
    }
    for (Map.Entry<PluginInfo, Object> entry : installedExtensionsByPlugin.entries()) {
        PluginInfo pluginInfo = entry.getKey();
        try {
            Object extension = entry.getValue();
            if (isExtensionProvider(extension)) {
                ExtensionProvider provider = (ExtensionProvider) container.getComponentByKey(extension);
                installProvider(container, pluginInfo, provider);
            }
        } catch (Throwable e) {
            // catch Throwable because we want to catch Error too (IncompatibleClassChangeError, ...)
            throw new IllegalStateException(String.format("Fail to load plugin %s [%s]", pluginInfo.getName(), pluginInfo.getKey()), e);
        }
    }
}
Also used : PluginInfo(org.sonar.core.platform.PluginInfo) ExtensionProvider(org.sonar.api.ExtensionProvider) Map(java.util.Map) Plugin(org.sonar.api.Plugin)

Aggregations

PluginInfo (org.sonar.core.platform.PluginInfo)50 Test (org.junit.Test)23 File (java.io.File)9 Plugin (org.sonar.api.Plugin)7 PluginInfo.jarToPluginInfo (org.sonar.core.platform.PluginInfo.jarToPluginInfo)7 PluginRepository (org.sonar.core.platform.PluginRepository)5 ExplodedPlugin (org.sonar.core.platform.ExplodedPlugin)4 FileUtils.copyFile (org.apache.commons.io.FileUtils.copyFile)3 FileUtils.moveFile (org.apache.commons.io.FileUtils.moveFile)3 SonarRuntime (org.sonar.api.SonarRuntime)3 AnalysisMode (org.sonar.api.batch.AnalysisMode)3 ComponentContainer (org.sonar.core.platform.ComponentContainer)3 Version (org.sonar.updatecenter.common.Version)3 VisibleForTesting (com.google.common.annotations.VisibleForTesting)2 IOException (java.io.IOException)2 HashMap (java.util.HashMap)2 Map (java.util.Map)2 Before (org.junit.Before)2 ExtensionProvider (org.sonar.api.ExtensionProvider)2 JsonWriter (org.sonar.api.utils.text.JsonWriter)2