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