1 package com.atlassian.plugin.main;
2
3 import com.atlassian.plugin.osgi.container.PackageScannerConfiguration;
4 import org.apache.commons.io.IOUtils;
5 import org.apache.log4j.Logger;
6 import org.apache.log4j.PropertyConfigurator;
7
8 import java.io.File;
9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.util.Collections;
12 import java.util.Properties;
13 import java.util.concurrent.TimeUnit;
14
15 import static com.atlassian.plugin.main.PackageScannerConfigurationBuilder.packageScannerConfiguration;
16 import static com.atlassian.plugin.main.PluginsConfigurationBuilder.pluginsConfiguration;
17
18
19
20
21
22
23
24 public class Main {
25 public static void main(final String[] args) {
26 initialiseLogger();
27 final File pluginDir = new File("plugins");
28
29 if (pluginDir.mkdir()) {
30 System.out.println("Created plugins directory " + pluginDir.getAbsolutePath());
31 } else if (pluginDir.isDirectory()) {
32 System.out.println("Using existing plugins directory " + pluginDir.getAbsolutePath());
33 } else {
34 System.out.println("Cannot create plugins directory " + pluginDir.getAbsolutePath());
35 }
36
37 final PackageScannerConfiguration packageScannerConfiguration = packageScannerConfiguration()
38 .packagesToInclude("org.apache.*", "com.atlassian.*", "org.dom4j*")
39 .packagesVersions(Collections.singletonMap("org.apache.log4j", "1.2.16"))
40 .build();
41 final PluginsConfiguration config = pluginsConfiguration()
42 .pluginDirectory(pluginDir)
43 .packageScannerConfiguration(packageScannerConfiguration)
44 .hotDeployPollingFrequency(5, TimeUnit.SECONDS)
45 .build();
46 final AtlassianPlugins plugins = new AtlassianPlugins(config);
47
48 Runtime.getRuntime().addShutdownHook(new Thread(() -> {
49 System.out.println("Cleaning up...");
50 plugins.getPluginSystemLifecycle().shutdown();
51 plugins.destroy();
52 }));
53
54 plugins.afterPropertiesSet();
55 plugins.getPluginSystemLifecycle().init();
56
57
58 try {
59 final Object waitable = new Object();
60
61
62 synchronized (waitable) {
63 waitable.wait();
64 }
65 } catch (final InterruptedException e) {
66
67 }
68 }
69
70 private static void initialiseLogger() {
71 final Properties logProperties = new Properties();
72
73 try (InputStream in = Main.class.getResourceAsStream("/log4j-standalone.properties")) {
74 logProperties.load(in);
75 PropertyConfigurator.configure(logProperties);
76 Logger.getLogger(Main.class).info("Logging initialized.");
77 } catch (final IOException e) {
78 throw new RuntimeException("Unable to load logging");
79 }
80 }
81 }