Developer
News and Updates
Get Support
Sign in
Get Support
Sign in
DOCUMENTATION
Cloud
Data Center
Resources
Sign in
Sign in
DOCUMENTATION
Cloud
Data Center
Resources
Sign in

Get your apps ready for Gray API removal

In Confluence 9.0, we will remove the ability for plugins to load many third-party libraries (aka “Gray APIs”) from the Confluence application. This means that plugins will need to start bundling their own copies of those libraries if they wish to continue using them.

There are a few exceptions to this. For example, Apache Struts 2 library will continue to be loadable by plugins and other third-party libraries that need to be shared between plugins and the application in order to function will also be loadable by plugins.

Additionally, starting from Confluence 8.7, most of these third-party libraries, as well as a few Atlassian-specific libraries, will no longer be exposed as a transitive Maven dependencies of the main confluence artefact. To compensate for this, plugins will need to explicitly declare those dependencies.

Note that prior to Confluence 9.0, there will be no runtime changes affecting the availability of these libraries, and binary compatibility will be maintained. The changes in 8.7 through 8.9 are build-time changes only, and will pave the way for the runtime removals in 9.0.

Build-time changes in 8.7

Confluence versions prior to 8.7 had a long list of transitive Maven dependencies exposed via the confluence Maven artefact. Most of these were present as part of the internal workings of Confluence, but plugins could make use of these without having to declare an explicit dependency on them.

From Confluence 8.7 onwards, most of these transitive dependencies have been removed, which means that plugins will need to declare explicit dependencies to compensate. It should only be necessary for plugins to declare explicit dependencies for those they are actually use.

Note that the versions of these dependencies are still managed via the confluence-plugins-platform-pom, so it’s not necessary to specify the version when adding explicit dependencies. These dependencies can be provided-scope, so that they’ll be loaded from the Confluence application at runtime, as before.

For example, if a plugin wishes to continue to use Apache Commons IO as before, then adding the following dependency will suffice:

1
2
3
4
5
6
<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <scope>provided</scope>
</dependency

The following list is the transitive dependencies available in Confluence 8.5, which are no longer available transitively starting with 8.7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
antlr:antlr:jar:2.7.7
biz.aQute.bnd:biz.aQute.bndlib:jar:3.5.0
cglib:cglib:jar:3.2.12
com.atlassian:atlassian-localhost:jar:1.2.0
com.fasterxml:classmate:jar:1.5.1
com.fasterxml.jackson.core:jackson-annotations:jar:2.15.3
com.fasterxml.jackson.core:jackson-core:jar:2.15.3
com.fasterxml.jackson.core:jackson-databind:jar:2.15.3
com.fasterxml.jackson.datatype:jackson-datatype-joda:jar:2.15.3
com.github.ben-manes.caffeine:caffeine:jar:2.9.3
com.github.gquintana.metrics:metrics-sql:jar:3.1.0-atlassian-4
com.github.oshi:oshi-core:jar:6.1.6
com.google.code.findbugs:findbugs-annotations:jar:3.0.1
com.google.code.gson:gson:jar:2.10.1
com.google.errorprone:error_prone_annotations:jar:2.17.0
com.google.guava:failureaccess:jar:1.0.1
com.google.guava:guava:jar:32.1.1-jre
com.google.guava:listenablefuture:jar:9999.0-empty-to-avoid-conflict-with-guava
com.google.j2objc:j2objc-annotations:jar:2.8
com.hazelcast:hazelcast-aws:jar:2.5-atlassian-1
com.ibm.icu:icu4j:jar:64.1
com.jhlabs:filters:jar:2.0.235
com.mchange:c3p0:jar:0.9.5.5
com.mchange:mchange-commons-java:jar:0.2.19
com.microsoft.azure:msal4j:jar:1.13.10
com.microsoft.sqlserver:mssql-jdbc:jar:7.4.1.jre8
commons-beanutils:commons-beanutils:jar:1.9.4
commons-codec:commons-codec:jar:1.15
commons-collections:commons-collections:jar:3.2.2
commons-digester:commons-digester:jar:2.1
commons-fileupload:commons-fileupload:jar:1.5
commons-httpclient:commons-httpclient:jar:3.1-atlassian-2
commons-io:commons-io:jar:2.11.0
commons-jrcs:commons-jrcs:jar:diff-0.1.7
commons-lang:commons-lang:jar:2.6
commons-validator:commons-validator:jar:1.5.1
com.nimbusds:content-type:jar:2.2
com.nimbusds:lang-tag:jar:1.6
com.nimbusds:nimbus-jose-jwt:jar:9.31
com.nimbusds:oauth2-oidc-sdk:jar:9.35
com.rometools:rome:jar:1.18.0
com.rometools:rome-utils:jar:1.18.0
com.sun.istack:istack-commons-runtime:jar:3.0.7
com.sun:jai_codec:jar:1.1.3
com.sun:jai_core:jar:1.1.3
com.sun.jersey:jersey-client:jar:1.19.5-atlassian-9
com.sun.jersey:jersey-core:jar:1.19.5-atlassian-9
com.sun.jersey:jersey-json:jar:1.19.5-atlassian-9
com.sun.xml.fastinfoset:FastInfoset:jar:1.2.15
com.sun.xml.messaging.saaj:saaj-impl:jar:1.5.3
com.sun.xml.stream.buffer:streambuffer:jar:1.5.10
com.sun.xml.ws:jaxws-rt:jar:2.3.5
com.sun.xml.ws:policy:jar:2.7.10
com.thoughtworks.xstream:xstream:jar:1.4.20
com.twelvemonkeys.common:common-image:jar:3.8.3
com.twelvemonkeys.common:common-io:jar:3.8.3
com.twelvemonkeys.common:common-lang:jar:3.8.3
com.twelvemonkeys.imageio:imageio-bmp:jar:3.8.3
com.twelvemonkeys.imageio:imageio-core:jar:3.8.3
com.twelvemonkeys.imageio:imageio-icns:jar:3.8.3
com.twelvemonkeys.imageio:imageio-jpeg:jar:3.8.3
com.twelvemonkeys.imageio:imageio-metadata:jar:3.8.3
com.twelvemonkeys.imageio:imageio-tiff:jar:3.8.3
com.zaxxer:HikariCP:jar:4.0.3
io.atlassian.fugue:fugue-deprecated:jar:5.0.0
io.atlassian.fugue:fugue-guava:jar:5.0.0
io.atlassian.fugue:fugue:jar:5.0.0
io.atlassian.fugue:fugue-optics:jar:5.0.0
io.atlassian.fugue:fugue-retry:jar:5.0.0
io.dropwizard.metrics:metrics-core:jar:4.0.7
io.dropwizard.metrics:metrics-jmx:jar:4.0.7
io.github.classgraph:classgraph:jar:4.8.164
io.github.x-stream:mxparser:jar:1.2.2
io.leopard.thirdparty:jcaptcha-api:jar:2.0.0
io.leopard.thirdparty:jcaptcha-core:jar:2.0.0
io.micrometer:micrometer-core:jar:1.7.12
io.micrometer:micrometer-registry-influx:jar:1.7.12
io.micrometer:micrometer-registry-jmx:jar:1.7.12
io.netty:netty-buffer:jar:4.1.100.Final
io.netty:netty-codec-http2:jar:4.1.100.Final
io.netty:netty-codec-http:jar:4.1.100.Final
io.netty:netty-codec:jar:4.1.100.Final
io.netty:netty-common:jar:4.1.100.Final
io.netty:netty-handler:jar:4.1.100.Final
io.netty:netty-resolver:jar:4.1.100.Final
io.netty:netty-transport-classes-epoll:jar:4.1.100.Final
io.netty:netty-transport:jar:4.1.100.Final
io.netty:netty-transport-native-unix-common:jar:4.1.100.Final
io.zipkin.brave:brave-instrumentation-httpclient:jar:5.13.11
io.zipkin.brave:brave-instrumentation-http:jar:5.13.11
io.zipkin.brave:brave-instrumentation-servlet:jar:5.13.11
io.zipkin.brave:brave:jar:5.13.11
io.zipkin.brave:brave-spring-beans:jar:5.13.11
io.zipkin.reporter2:zipkin-reporter-brave:jar:2.16.3
io.zipkin.reporter2:zipkin-reporter:jar:2.16.3
io.zipkin.reporter2:zipkin-reporter-spring-beans:jar:2.16.3
io.zipkin.zipkin2:zipkin:jar:2.23.2
jakarta.jws:jakarta.jws-api:jar:2.1.0
jakarta.validation:jakarta.validation-api:jar:2.0.2
jakarta.xml.soap:jakarta.xml.soap-api:jar:1.4.2
jakarta.xml.ws:jakarta.xml.ws-api:jar:2.3.3
javax.transaction:javax.transaction-api:jar:1.2
javax.ws.rs:jsr311-api:jar:1.1.1
jaxen:jaxen:jar:1.1.6
joda-time:joda-time:jar:2.12.5
net.bytebuddy:byte-buddy:jar:1.14.3
net.java.dev.jna:jna:jar:5.11.0
net.java.dev.jna:jna-platform:jar:5.11.0
net.jcip:jcip-annotations:jar:1.0
net.minidev:accessors-smart:jar:2.5.0
net.minidev:json-smart:jar:2.5.0
net.sf.cssbox:jstyleparser:jar:1.16-atlassian-1
net.sf.supercsv:super-csv:jar:2.1.0
net.sourceforge.jtds:jtds:jar:1.3.1
net.sourceforge.nekohtml:nekohtml:jar:1.9.22-atlassian-3
net.sourceforge.nekohtml:xerces-bridge-2-0:jar:1.9.22-atlassian-3
net.sourceforge.nekohtml:xerces-bridge-2-2:jar:1.9.22-atlassian-3
net.sourceforge.nekohtml:xerces-bridge-2-3:jar:1.9.22-atlassian-3
net.sourceforge.nekohtml:xerces-bridge:jar:1.9.22-atlassian-3
opensymphony:oscore:jar:2.3.0-atlassian-1
opensymphony:sitemesh:jar:2.5-atlassian-11
org.antlr:antlr-runtime:jar:3.5.2
org.apache.ant:ant:jar:1.10.14
org.apache.ant:ant-launcher:jar:1.10.14
org.apache.commons:commons-collections4:jar:4.4
org.apache.commons:commons-compress:jar:1.21
org.apache.commons:commons-lang3:jar:3.12.0
org.apache.commons:commons-pool2:jar:2.6.2
org.apache.commons:commons-text:jar:1.10.0
org.apache.felix:org.apache.felix.framework:jar:7.0.5
org.apache.httpcomponents.client5:httpclient5:jar:5.2.1
org.apache.httpcomponents.core5:httpcore5-h2:jar:5.2
org.apache.httpcomponents.core5:httpcore5:jar:5.2.3
org.apache.httpcomponents:httpclient-cache:jar:4.5.14
org.apache.httpcomponents:httpclient:jar:4.5.14
org.apache.httpcomponents:httpcore:jar:4.4.16
org.apache.httpcomponents:httpmime:jar:4.5.14
org.apache.logging.log4j:log4j-1.2-api:jar:2.19.0
org.apache.logging.log4j:log4j-core:jar:2.19.0
org.apache.lucene:lucene-analyzers-common:jar:4.4.0-atlassian-11
org.apache.lucene:lucene-analyzers-kuromoji:jar:4.4.0-atlassian-11
org.apache.lucene:lucene-analyzers-stempel:jar:4.4.0-atlassian-11
org.apache.lucene:lucene-core:jar:4.4.0-atlassian-11
org.apache.lucene:lucene-highlighter:jar:4.4.0-atlassian-11
org.apache.lucene:lucene-memory:jar:4.4.0-atlassian-11
org.apache.lucene:lucene-misc:jar:4.4.0-atlassian-11
org.apache.lucene:lucene-queries:jar:4.4.0-atlassian-11
org.apache.lucene:lucene-queryparser:jar:4.4.0-atlassian-11
org.apache.lucene:lucene-sandbox:jar:4.4.0-atlassian-11
org.apache.pdfbox:fontbox:jar:2.0.29
org.apache.pdfbox:pdfbox:jar:2.0.29
org.apache.pdfbox:xmpbox:jar:2.0.29
org.apache.tika:tika-core:jar:2.7.0
org.apache.xmlgraphics:batik-anim:jar:1.17
org.apache.xmlgraphics:batik-awt-util:jar:1.17
org.apache.xmlgraphics:batik-bridge:jar:1.17
org.apache.xmlgraphics:batik-codec:jar:1.17
org.apache.xmlgraphics:batik-constants:jar:1.17
org.apache.xmlgraphics:batik-css:jar:1.17
org.apache.xmlgraphics:batik-dom:jar:1.17
org.apache.xmlgraphics:batik-ext:jar:1.17
org.apache.xmlgraphics:batik-gvt:jar:1.17
org.apache.xmlgraphics:batik-i18n:jar:1.17
org.apache.xmlgraphics:batik-parser:jar:1.17
org.apache.xmlgraphics:batik-script:jar:1.17
org.apache.xmlgraphics:batik-shared-resources:jar:1.17
org.apache.xmlgraphics:batik-svg-dom:jar:1.17
org.apache.xmlgraphics:batik-svggen:jar:1.17
org.apache.xmlgraphics:batik-transcoder:jar:1.17
org.apache.xmlgraphics:batik-util:jar:1.17
org.apache.xmlgraphics:batik-xml:jar:1.17
org.apache.xmlgraphics:xmlgraphics-commons:jar:2.9
org.aspectj:aspectjweaver:jar:1.9.6
org.bouncycastle:bcmail-lts8on:jar:2.73.3
org.bouncycastle:bcpkix-lts8on:jar:2.73.3
org.bouncycastle:bcprov-lts8on:jar:2.73.3
org.bouncycastle:bcutil-lts8on:jar:2.73.3
org.codehaus.jackson:jackson-core-asl:jar:1.9.14-atlassian-6
org.codehaus.jackson:jackson-jaxrs:jar:1.9.14-atlassian-6
org.codehaus.jackson:jackson-mapper-asl:jar:1.9.14-atlassian-6
org.codehaus.jackson:jackson-xc:jar:1.9.14-atlassian-6
org.codehaus.jettison:jettison:jar:1.5.4
org.codehaus.mojo:animal-sniffer-annotations:jar:1.9
org.dom4j:dom4j:jar:2.1.4
org.eclipse.core:runtime:jar:20070801
org.freemarker:freemarker:jar:2.3.32
org.glassfish.external:management-api:jar:3.2.3
org.glassfish.gmbal:gmbal-api-only:jar:4.0.3
org.glassfish.ha:ha-api:jar:3.1.13
org.glassfish:jakarta.json:jar:1.1.6
org.glassfish.jaxb:jaxb-runtime:jar:2.3.1
org.glassfish.jaxb:txw2:jar:2.3.1
org.hdrhistogram:HdrHistogram:jar:2.1.12
org.hibernate.common:hibernate-commons-annotations:jar:5.1.2.Final
org.hibernate:hibernate-c3p0:jar:5.6.10.Final
org.hibernate:hibernate-core:jar:5.6.10.Final
org.hibernate:hibernate-hikaricp:jar:5.6.10.Final
org.hibernate:jtidy:jar:r8-20060801
org.hibernate.validator:hibernate-validator:jar:6.0.23.Final
org.jboss:jandex:jar:2.4.2.Final
org.jboss.logging:jboss-logging:jar:3.4.3.Final
org.jdom:jdom2:jar:2.0.6.1
org.jdom:jdom:jar:1.1.3-atlassian-5
org.json:json:jar:20230618
org.jsoup:jsoup:jar:1.15.4
org.jvnet.staxex:stax-ex:jar:1.8
org.latencyutils:LatencyUtils:jar:2.0.3
org.outerj.daisy:daisydiff:jar:1.2.3-atlassian-hosted
org.ow2.asm:asm:jar:9.5
org.postgresql:postgresql:jar:42.5.3
org.reactivestreams:reactive-streams:jar:1.0.3
org.slf4j:jcl-over-slf4j:jar:1.7.36
org.slf4j:jul-to-slf4j:jar:1.7.36
org.springframework.ldap:spring-ldap-core:jar:2.4.1
org.springframework.security:spring-security-core:jar:5.8.8
org.springframework.security:spring-security-crypto:jar:5.8.8
org.springframework:spring-context-support:jar:5.3.30
org.springframework:spring-jdbc:jar:5.3.30
org.springframework:spring-orm:jar:5.3.30
org.springframework:spring-web:jar:5.3.30
org.springframework:spring-webmvc:jar:5.3.30
org.tuckey:urlrewritefilter:jar:4.0.4
org.twdata.pkgscanner:package-scanner:jar:0.9.5
org.xerial.snappy:snappy-java:jar:1.1.10.5
org.yaml:snakeyaml:jar:2.0
oscache:oscache:jar:2.2
rome:rome:jar:1.0
software.amazon.awssdk:annotations:jar:2.20.38
software.amazon.awssdk:apache-client:jar:2.20.38
software.amazon.awssdk:arns:jar:2.20.38
software.amazon.awssdk:auth:jar:2.20.38
software.amazon.awssdk:aws-core:jar:2.20.38
software.amazon.awssdk:aws-query-protocol:jar:2.20.38
software.amazon.awssdk:aws-xml-protocol:jar:2.20.38
software.amazon.awssdk:crt-core:jar:2.20.38
software.amazon.awssdk:endpoints-spi:jar:2.20.38
software.amazon.awssdk:http-client-spi:jar:2.20.38
software.amazon.awssdk:json-utils:jar:2.20.38
software.amazon.awssdk:metrics-spi:jar:2.20.38
software.amazon.awssdk:netty-nio-client:jar:2.20.38
software.amazon.awssdk:profiles:jar:2.20.38
software.amazon.awssdk:protocol-core:jar:2.20.38
software.amazon.awssdk:regions:jar:2.20.38
software.amazon.awssdk:s3:jar:2.20.38
software.amazon.awssdk:sdk-core:jar:2.20.38
software.amazon.awssdk:sts:jar:2.20.38
software.amazon.awssdk:third-party-jackson-core:jar:2.20.38
software.amazon.awssdk:utils:jar:2.20.38
software.amazon.eventstream:eventstream:jar:1.0.1
xmlpull:xmlpull:jar:1.1.3.1
xmlrpc:xmlrpc:jar:2.0+xmlrpc61.1+sbfix

Runtime changes in 9.0

In addition to the build-time changes introduced in 8.7, starting from 9.0 these third-party libraries will not be able to be loaded by plugins from the Confluence application at all. This means that the provided-scope in the above example will no longer suffice.

Instead, plugins will need to start bundling their own copy of the required dependencies if they wish to continue to use them. This is done using compile or runtime-scope. In addition, plugins should start version-managing these dependencies themselves, rather than relying on the confluence-plugin-platform-pom.

A note on backwards compatibility

All of the changes above are backwards compatible with previous versions. You can declare explicit dependencies on third-party libraries, as well as bundle them into the plugin by changing the dependency scope, in any Confluence version. In the interests of continuity, we advise making these changes early, and testing them against milestones of Confluence 9.0 when they become available.

Changes in development and production modes

In production mode, Confluence 8.8 and 8.9 will behave as before, but the system will log warnings whenever a deprecated Java package is used. From Confluence 9.0 onwards, accessing these packages will result in a failure.

In development mode, a failure will occur from Confluence 8.8 onwards unless the system property confluence.osgi.treatDeprecatedPackagesAsPublic is set to true.

Next Steps:

  1. Understand the changes: Familiarize yourself with the changes coming in Confluence 8.7 to 9.0. From 8.7 to 8.9, build-time changes will mean that plugins will need to explicitly declare dependencies. In 9.0, most third-party libraries will not be loadable from the Confluence application, requiring plugins to bundle these libraries themselves.

  2. Declare explicit dependencies: Starting from Confluence 8.7, declare explicit dependencies for the third-party libraries and Atlassian-specific libraries you are using in your plugins. You do not need to specify the version when adding explicit dependencies as these are still managed via the confluence-plugins-platform-pom.

  3. Prepare for runtime changes in 9.0: The changes in 8.7 pave the way for the runtime removals in 9.0. Prepare for this by planning to bundle your own copy of the required dependencies and start version-managing these dependencies, rather than relying on the confluence-plugin-platform-pom.

  4. Review the list of libraries: Go through the list of libraries mentioned, and identify which are relevant to your plugins. Start planning how to manage these in your plugins for versions 8.7 to 9.0.

  5. Provide feedback: Your input is invaluable to us. Please don't hesitate to raise any questions or concerns in our Developer Community. We are here to support you through these changes.

Rate this page: