Hi Henrik,
Following on from this discussion, herewith some more detail.
I added very simple unit tests that assert that instances of selected classes within cloudformation, s3 and sts APIs can be created.
Also like to know what does the number refer to in OSGI errors like missing requirement [115.0]
The POM…
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.reedexpo.cloudformation</groupId>
<artifactId>cloudFormation</artifactId>
<version>1.0.0-SNAPSHOT</version>
<organization>
<name>Example Company</name>
<url>http://www.example.com/</url>
</organization>
<name>cloudFormation</name>
<description>This is the com.reedexpo.cloudformation plugin for Atlassian Bamboo.</description>
<packaging>atlassian-plugin</packaging>
<properties>
<bamboo.version>6.7.1</bamboo.version>
<bamboo.data.version>6.7.1</bamboo.data.version>
<amps.version>8.0.0</amps.version>
<plugin.testrunner.version>2.0.1</plugin.testrunner.version>
<atlassian.spring.scanner.version>1.2.13</atlassian.spring.scanner.version>
<!-- This property ensures consistency between the key in atlassian-plugin.xml and the OSGi bundle's key. -->
<atlassian.plugin.key>${project.groupId}.${project.artifactId}</atlassian.plugin.key>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<aws.sdk.version>1.11.557</aws.sdk.version>
</properties>
<dependencies>
<dependency>
<groupId>com.atlassian.bamboo</groupId>
<artifactId>atlassian-bamboo-web</artifactId>
<version>${bamboo.version}</version>
<scope>provided</scope>
<exclusions>
<!-- Ensure no transitive dependency on the AWS SDK from Bamboo -->
<exclusion>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
</exclusion>
<exclusion>
<groupId>stax</groupId>
<artifactId>stax-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.atlassian.plugin</groupId>
<artifactId>atlassian-spring-scanner-annotation</artifactId>
<version>${atlassian.spring.scanner.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.atlassian.plugin</groupId>
<artifactId>atlassian-spring-scanner-runtime</artifactId>
<version>${atlassian.spring.scanner.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>${aws.sdk.version}</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sts</artifactId>
<version>${aws.sdk.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-cloudformation</artifactId>
<version>${aws.sdk.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>${aws.sdk.version}</version>
<scope>compile</scope>
</dependency>
<!-- WIRED TEST RUNNER DEPENDENCIES -->
<dependency>
<groupId>com.atlassian.plugins</groupId>
<artifactId>atlassian-plugins-osgi-testrunner</artifactId>
<version>${plugin.testrunner.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.2-atlassian-1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>bamboo-maven-plugin</artifactId>
<version>${amps.version}</version>
<extensions>true</extensions>
<configuration>
<productVersion>${bamboo.version}</productVersion>
<productDataVersion>${bamboo.data.version}</productDataVersion>
<enableQuickReload>true</enableQuickReload>
<!-- See here for an explanation of default instructions: -->
<!-- https://developer.atlassian.com/docs/advanced-topics/configuration-of-instructions-in-atlassian-plugins -->
<instructions>
<Atlassian-Plugin-Key>${atlassian.plugin.key}</Atlassian-Plugin-Key>
<!-- Add package to export here -->
<Export-Package>
com.reedexpo.cloudformation.api,
</Export-Package>
<!-- Add package import here -->
<Import-Package> org.springframework.osgi.*;resolution:="optional", org.eclipse.gemini.blueprint.*;resolution:="optional",
<!-- Explicitly forbid AWS related imports -->
!com.amazonaws*,
*;
</Import-Package>
<!-- Ensure plugin is spring powered -->
<Spring-Context>*</Spring-Context>
</instructions>
</configuration>
</plugin>
<plugin>
<groupId>com.atlassian.plugin</groupId>
<artifactId>atlassian-spring-scanner-maven-plugin</artifactId>
<version>${atlassian.spring.scanner.version}</version>
<executions>
<execution>
<goals>
<goal>atlassian-spring-scanner</goal>
</goals>
<phase>process-classes</phase>
</execution>
</executions>
<configuration>
<scannedDependencies>
<dependency>
<groupId>com.atlassian.plugin</groupId>
<artifactId>atlassian-spring-scanner-external-jar</artifactId>
</dependency>
</scannedDependencies>
<verbose>false</verbose>
</configuration>
</plugin>
</plugins>
</build>
</project>
Selected output of bamboo log…
2019-05-22 20:34:42,458 WARN [localhost-startStop-1] [ScanDescriptorForHostClassesStage] The plugin 'atlassian-universal-plugin-manager-plugin-2.22.14.jar' uses a package 'org.apache.velocity.tools.generic' that is also exported by the application. It is highly recommended that the plugin use its own packages.
2019-05-22 20:34:42,690 WARN [localhost-startStop-1] [ScanDescriptorForHostClassesStage] The plugin 'atlassian-universal-plugin-manager-plugin-2.22.14.jar' uses a package 'org.apache.commons.fileupload.servlet' that is also exported by the application. It is highly recommended that the plugin use its own packages.
2019-05-22 20:34:46,515 WARN [localhost-startStop-1] [GenerateManifestStage] Manifest contains a 'Spring-Context:' header with a timeout, namely '*;timeout:=60'. This can cause problems as the timeout is server specific. Use the header 'Spring-Context: *' in the jar 'pdkinstall-plugin-0.6.jar'.
2019-05-22 20:34:50,108 ERROR [localhost-startStop-1] [OsgiPluginInstalledHelper] Cannot determine required plugins, cannot resolve bundle 'com.reedexpo.cloudformation.cloudFormation'
2019-05-22 20:34:50,108 ERROR [localhost-startStop-1] [OsgiPluginInstalledHelper] Cannot determine required plugins, cannot resolve bundle 'com.reedexpo.cloudformation.cloudFormation-tests'
2019-05-22 20:34:50,167 INFO [localhost-startStop-1] [DefaultOsgiApplicationContextCreator] Discovered configurations {osgibundle:/META-INF/spring/*.xml} in bundle [Atlassian Bamboo Web Resources Plugin (com.atlassian.bamboo.plugins.atlassian-bamboo-plugin-web-resources)]
2019-05-22 20:34:50,181 INFO [localhost-startStop-1] [DefaultOsgiApplicationContextCreator] Discovered configurations {osgibundle:/META-INF/spring/*.xml} in bundle [ActiveObjects Plugin - OSGi Bundle (com.atlassian.activeobjects.activeobjects-plugin)]
2019-05-22 20:35:06,628 ERROR [localhost-startStop-1] [OsgiPlugin] Detected an error (BundleException) enabling the plugin 'com.reedexpo.cloudformation.cloudFormation' : Unresolved constraint in bundle com.reedexpo.cloudformation.cloudFormation [115]: Unable to resolve 115.0: missing requirement [115.0] osgi.wiring.package; (osgi.wiring.package=org.joda.convert). This error usually occurs when your plugin imports a package from another bundle with a specific version constraint and either the bundle providing that package doesn't meet those version constraints, or there is no bundle available that provides the specified package. For more details on how to fix this, see https://developer.atlassian.com/x/mQAN
2019-05-22 20:35:06,627 INFO [ThreadPoolAsyncTaskExecutor::Thread 3] [ExtenderConfiguration] Application context successfully refreshed (NonValidatingOsgiBundleXmlApplicationContext(bundle=com.atlassian.plugins.bamboo-project-creation, config=osgibundle:/META-INF/spring/*.xml))
2019-05-22 20:35:06,799 INFO [ThreadPoolAsyncTaskExecutor::Thread 4] [DependencyServiceManager] Adding OSGi service dependency for importer [&requestFactory] matching OSGi filter [(objectClass=com.atlassian.sal.api.net.RequestFactory)]
2019-05-22 20:35:06,799 INFO [ThreadPoolAsyncTaskExecutor::Thread 2] [DependencyServiceManager] Adding OSGi service dependency for importer [&applicationLinkService] matching OSGi filter [(&(objectClass=com.atlassian.applinks.api.ApplicationLinkService)(objectClass=com.atlassian.applinks.api.ApplicationLinkService))]
2019-05-22 20:35:06,799 WARN [localhost-startStop-1] [AbstractPlugin] Unable to enable plugin 'com.reedexpo.cloudformation.cloudFormation'
2019-05-22 20:35:06,800 INFO [ThreadPoolAsyncTaskExecutor::Thread 4] [DependencyServiceManager] Adding OSGi service dependency for importer [&i18nResolver] matching OSGi filter [(objectClass=com.atlassian.sal.api.message.I18nResolver)]
2019-05-22 20:35:06,800 INFO [ThreadPoolAsyncTaskExecutor::Thread 4] [DependencyServiceManager] Adding OSGi service dependency for importer [&localeResolver] matching OSGi filter [(objectClass=com.atlassian.sal.api.message.LocaleResolver)]
2019-05-22 20:35:06,800 INFO [ThreadPoolAsyncTaskExecutor::Thread 4] [DependencyServiceManager] Adding OSGi service dependency for importer [&txTemplate] matching OSGi filter [(objectClass=com.atlassian.sal.api.transaction.TransactionTemplate)]
2019-05-22 20:35:06,800 INFO [ThreadPoolAsyncTaskExecutor::Thread 4] [DependencyServiceManager] Adding OSGi service dependency for importer [&schedulerService] matching OSGi filter [(objectClass=com.atlassian.scheduler.SchedulerService)]
2019-05-22 20:35:06,800 INFO [ThreadPoolAsyncTaskExecutor::Thread 4] [DependencyServiceManager] Adding OSGi service dependency for importer [&executorFactory] matching OSGi filter [(objectClass=com.atlassian.sal.api.executor.ThreadLocalDelegateExecutorFactory)]
2019-05-22 20:35:06,800 INFO [ThreadPoolAsyncTaskExecutor::Thread 4] [DependencyServiceManager] Adding OSGi service dependency for importer [&licenseHandler] matching OSGi filter [(objectClass=com.atlassian.sal.api.license.LicenseHandler)]
2019-05-22 20:35:06,831 INFO [ThreadPoolAsyncTaskExecutor::Thread 7] [DependencyServiceManager] Adding OSGi service dependency for importer [&ao] matching OSGi filter [(&(objectClass=com.atlassian.activeobjects.external.ActiveObjects)(objectClass=com.atlassian.activeobjects.external.ActiveObjects))]
2019-05-22 20:35:06,819 INFO [ThreadPoolAsyncTaskExecutor::Thread 6] [ExtenderConfiguration] Application context successfully refreshed (NonValidatingOsgiBundleXmlApplicationContext(bundle=com.atlassian.plugins.remote-link-aggregator-plugin, config=osgibundle:/META-INF/spring/*.xml))
2019-05-22 20:35:06,816 INFO [ThreadPoolAsyncTaskExecutor::Thread 1] [OsgiServiceFactoryBean] Publishing service under classes [{com.atlassian.oauth.serviceprovider.ServiceProviderTokenStore}]
2019-05-22 20:35:06,806 INFO [ThreadPoolAsyncTaskExecutor::Thread 5] [OsgiServiceFactoryBean] Publishing service under classes [{com.atlassian.sal.api.net.NonMarshallingRequestFactory}]
2019-05-22 20:35:06,801 WARN [localhost-startStop-1] [AbstractPlugin] Because of this exception
com.atlassian.plugin.osgi.container.OsgiContainerException: Cannot start plugin: com.reedexpo.cloudformation.cloudFormation
at com.atlassian.plugin.osgi.factory.OsgiPlugin.enableInternal(OsgiPlugin.java:418)
at com.atlassian.plugin.impl.AbstractPlugin.enable(AbstractPlugin.java:286)
at com.atlassian.plugin.manager.PluginEnabler.actualEnable(PluginEnabler.java:130)
at com.atlassian.plugin.manager.PluginEnabler.enable(PluginEnabler.java:107)
at com.atlassian.plugin.manager.DefaultPluginManager.enableDependentPlugins(DefaultPluginManager.java:1212)
at com.atlassian.plugin.manager.DefaultPluginManager.addPlugins(DefaultPluginManager.java:1188)
at com.atlassian.bamboo.plugin.BambooPluginManager.addPlugins(BambooPluginManager.java:104)
at com.atlassian.plugin.manager.DefaultPluginManager.earlyStartup(DefaultPluginManager.java:573)
at com.atlassian.plugin.manager.DefaultPluginManager.init(DefaultPluginManager.java:503)
at com.atlassian.bamboo.container.BambooContainer.init(BambooContainer.java:213)
at com.atlassian.bamboo.container.BambooContainer.initialise(BambooContainer.java:200)
at com.atlassian.bamboo.upgrade.UpgradeLauncher.initialiseBambooContainer(UpgradeLauncher.java:157)
at com.atlassian.bamboo.upgrade.UpgradeLauncher.upgradeAndStartBamboo(UpgradeLauncher.java:91)
at com.atlassian.bamboo.upgrade.UpgradeLauncher.contextInitialized(UpgradeLauncher.java:42)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4900)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5363)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:755)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:731)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:973)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1850)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.osgi.framework.BundleException: Unresolved constraint in bundle com.reedexpo.cloudformation.cloudFormation [115]: Unable to resolve 115.0: missing requirement [115.0] osgi.wiring.package; (osgi.wiring.package=org.joda.convert)
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3974)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2037)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:942)
at com.atlassian.plugin.osgi.factory.OsgiPlugin.enableInternal(OsgiPlugin.java:399)
... 26 more
2019-05-22 20:35:06,800 INFO [ThreadPoolAsyncTaskExecutor::Thread 2] [DependencyServiceManager] Adding OSGi service dependency for importer [&helpPathResolver] matching OSGi filter [(&(objectClass=com.atlassian.sal.api.message.HelpPathResolver)(objectClass=com.atlassian.sal.api.message.HelpPathResolver))]
2019-05-22 20:35:07,001 INFO [ThreadPoolAsyncTaskExecutor::Thread 1] [OsgiServiceFactoryBean] Publishing service under classes [{com.atlassian.sal.api.upgrade.PluginUpgradeTask}]
2019-05-22 20:35:06,999 ERROR [localhost-startStop-1] [PluginEnabler] Unable to enable plugin com.reedexpo.cloudformation.cloudFormation
com.atlassian.plugin.osgi.container.OsgiContainerException: Cannot start plugin: com.reedexpo.cloudformation.cloudFormation
at com.atlassian.plugin.osgi.factory.OsgiPlugin.enableInternal(OsgiPlugin.java:418)
at com.atlassian.plugin.impl.AbstractPlugin.enable(AbstractPlugin.java:286)
at com.atlassian.plugin.manager.PluginEnabler.actualEnable(PluginEnabler.java:130)
at com.atlassian.plugin.manager.PluginEnabler.enable(PluginEnabler.java:107)
at com.atlassian.plugin.manager.DefaultPluginManager.enableDependentPlugins(DefaultPluginManager.java:1212)
at com.atlassian.plugin.manager.DefaultPluginManager.addPlugins(DefaultPluginManager.java:1188)
at com.atlassian.bamboo.plugin.BambooPluginManager.addPlugins(BambooPluginManager.java:104)
at com.atlassian.plugin.manager.DefaultPluginManager.earlyStartup(DefaultPluginManager.java:573)
at com.atlassian.plugin.manager.DefaultPluginManager.init(DefaultPluginManager.java:503)
at com.atlassian.bamboo.container.BambooContainer.init(BambooContainer.java:213)
at com.atlassian.bamboo.container.BambooContainer.initialise(BambooContainer.java:200)
at com.atlassian.bamboo.upgrade.UpgradeLauncher.initialiseBambooContainer(UpgradeLauncher.java:157)
at com.atlassian.bamboo.upgrade.UpgradeLauncher.upgradeAndStartBamboo(UpgradeLauncher.java:91)
at com.atlassian.bamboo.upgrade.UpgradeLauncher.contextInitialized(UpgradeLauncher.java:42)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4900)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5363)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:755)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:731)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:973)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1850)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.osgi.framework.BundleException: Unresolved constraint in bundle com.reedexpo.cloudformation.cloudFormation [115]: Unable to resolve 115.0: missing requirement [115.0] osgi.wiring.package; (osgi.wiring.package=org.joda.convert)
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3974)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2037)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:942)
at com.atlassian.plugin.osgi.factory.OsgiPlugin.enableInternal(OsgiPlugin.java:399)
... 26 more
2019-05-22 20:35:06,996 INFO [ThreadPoolAsyncTaskExecutor::Thread 5] [OsgiServiceFactoryBean] Publishing service under classes [{com.atlassian.sal.api.search.query.SearchQueryParser}]