Preparing for Confluence 7.0

tip/resting Created with Sketch.

Confluence 7.0 is available now

Check out the Confluence 7.0 Release Notes and Confluence 7.0 Upgrade Notes to find out what's changed.

This documentation is intended for Confluence developers who want to ensure that their existing plugins and apps are compatible with Confluence 7.0.

Confluence 7.0 will be our next Confluence version. It's a platform release, so will contain breaking changes

We plan to release regular EAP (Early Access Program) milestones over the next few months, in the lead up to Confluence 7.0. We’ve extended the development timeline, so expect some additional milestones before the final release.

Watch this page to find out when a new milestone is available and what’s changed. We will publish formal release notes once we release a beta.

Latest milestone
2 September 20197.0.1-RC1Download
Issues with this milestone?

Hit the Feedback button on the Confluence EAP header or raise an issue to tell us about it.

On this page:

As we are about to release Confluence 7.0, we thought it would be a good time to share what goes on behind the scenes as a complement to the info provided on this page.

We've posted some info on Developer Community about the routine updates and best practices our teams follow to maintain and nurture our code-base. See Confluence 7.0 developer guide.

Planned changes

In this section we'll provide an overview of the changes we intend to make in Confluence 7.0, so you can start thinking how it might impact your app. We'll indicate when a change has been implemented, and in which milestone. 

Java 11

Status: DELAYED

We had planned to provide Java 11 runtime support in Confluence 7.0. We still have a few outstanding issues, so have delayed this work to a later 7.x release.  

Feature deprecations

Status: COMPLETE

We've deprecated or removed a small number of features in Confluence 7.0. Head to our End of Support announcements page for more details.

Removing deprecated code

Status: COMPLETE

We have now finished removing all code paths deprecated in Confluence 5.x and earlier. See Deprecated code paths removed in 7.0 for a full list of the classes and methods removed.  If we happen to remove any additional deprecated code, we'll also call it out in the notes section below. 

Changes like this help us maintain a healthy code-base, remove hurdles for developers, and simplify the code structure where possible. 

Notes
  • The htmlUtil class is exposed in the Velocity context, so you can use this as an alternative to  deprecated GeneralUltil  methods. 

Removing deprecated javascript globals

Status: DELAYED

In Confluence 5.9 we deprecated all Confluence provided javascript globals. We are in the process of replacing these with frontend APIs.  We didn't manage to complete this in time for 7.0, so will resume this work at a later date. We'll provide more information when we re-commence this work.  

Direct access to Lucene API is deprecated

Status: COMPLETE

Direct access to Lucene API is deprecated from Confluence 7.0, and will be disallowed in a future release. We've decided to make this change to allow us to make changes to the underlying search engine without impacting your apps.

There is no substitution for some of the deprecated APIs that are rarely used, or those that when used incorrectly can cause significant problems for your app.

We've developed several new tutorials to help you use the Confluence search APIs instead of accessing the Lucene API directly:

We've also added the following module docs:

The following modules have been deprecated, and should not be used:

Atlassian User Interface (AUI) upgrade

Status: COMPLETE

Confluence 7.0 will include a major upgrade of AUI (the Atlassian User Interface) to a current version of AUI 8 (AUI 8.3.1 or later). See the AUI upgrade guide to find out what's changing. We've also created a Confluence AUI upgrade with best practices for updating your apps.

We're still fixing a few bugs and issues, but this work is mostly complete. 

jQuery upgrade

Status: COMPLETE

Confluence 7.0 will include an upgrade of jQuery from 1.7.2 to 2.2.4. We recommend looking at the jQuery 1.9 upgrade guide for an overview of the important changes. We'll provide updates of our progress on this page. 

Spring upgrade

Status: COMPLETE

As part of our Platform 5 upgrade, we have upgraded Spring framework to 5.1.7.  The main change that is likely to affect plugins is a change to the default Spring autowiring behaviour from "autodetect" to "constructor".

Setter wiring will stop working in:

  • Components
  • REST Resources
  • Conditions

And should be replaced to constructor injection (or annotations). Setter injection will continue to work in macros (as of 7.0), but we expect to remove it in 8.0. Plugin developers should gradually start to use constructor injections in macros as well, to ease future migration to 8.0.

If Confluence is started in Dev Mode (-Dconfluence.devmode=true), we now log a warning each time setter injection is used in deprecated way, for example:

2019-07-30 13:11:27,498 WARN [RMI TCP Connection(2)-127.0.0.1] [atlassian.confluence.plugin.LegacySpringContainerAccessor] checkAndWarnAboutSetterInjection The bean class com.atlassian.confluence.tinymceplugin.conditions.EditOrCreatePageCondition of plugin "Confluence Editor Plugin" has public no-arg constructor which causes Spring to use setter injection. This will be deprecated soon and only constructor injection will be available. The code should be refactored to use constructor injection and public no-arg constructor should be removed.


CDN for Confluence Data Center

Status:  COMPLETE

Confluence 7.0 will have ability to serve static assets from a CDN in Confluence Data Center. This includes static resources that are served by plugins, so enabling this feature might affect your plugin.

If you're using a WRM library properly, you shouldn't encounter any problems, but we recommend that you check the plugin compatibility, as described below.

Check font resources are publicly usable...

To verify font compatibility, you can use the following CDN health check endpoint:

https://<base-url>/rest/static-asset-caching/health-checks

The endpoint will list any offending plugins. Currently, the only implemented health check is related to embedded fonts that are not declared as publicly accessible.

To declare that a resource can be publicly usable, add allow-public-use parameter set to true to the resource definition, for example:

        <resource type="download" name="atlassian-icons.woff" location="css/atlassian/fonts/atlassian-icons.woff">
            <param name="allow-public-use" value="true"/>
            <param name="content-type" value="font/x-woff"/>
        </resource>

Note that the font license may impose restrictions on its distribution that make such declarations violate the license terms. Such plugins will not be compatible with CDN.

Check you're not using incompatible plugin points...

In Confluence 6.0 we moved to stateless delivery of JavaScript and CSS resources. Apps that don't use the new APIs for web-resource transforms and conditions may cause static assets to be cached incorrectly. 

See Stateless web-resource transforms and conditions to make sure your app is using the new APIs for web-resource transforms and conditions. 

You can use the following endpoint to list the incompatible plugins:

https://<base-url>/rest/webResources/1.0/deprecatedDescriptors

We also provide a health check on the CDN administration screen that will indicate if an app is using deprecated methods. 

New confirmation prompt on editor page reload

Status: COMPLETE

From Confluence 7.0 onwards, the editor will ask users to confirm a page reload. This is to make sure we are able to sync changes back to the draft when someone leaves the editor unexpectedly. 

If your app performs a page reload in the editor for any reason (for example if your app spawns its own editor) you can avoid this prompt by initiating the content save yourself as follows:

define('my-amd-module', [ 'confluence/legacy' ], function(Confluence) {
    //...
    reloadPage: function() {
        // before page reload
        Confluence.Editor.Drafts.save({
                // Skip error handler
                skipErrorHandler: true
        });
        // reload page here!
    }
    //...
})

You will also need to add a dependency on the editor in your atlassian-plugin.xml as in this example:

WRM.require('wr!<web-resource key="my-plugin-js" name="My Plugin Js Resources" i18n-name-key="my.plugin.js.resources">
    <!-- defining resources here... -->
    <dependency>com.atlassian.confluence.editor:page-editor-js</dependency>
</web-resource>', function() {
    const Confluence = require('confluence/legacy');
	// Use Confluence.Editor.Drafts as above
})

Velocity-htmlsafe upgrade

Status: COMPLETE

We've upgraded velocity-htmlsafe to 3.1.0. This release allows products to inspect templates and protect against template injection and remote code executions from velocity templates. 

Velocity templates containing any restricted classes/packages will not be rendered in the server. The default set of restricted classes/packages can be found in the velocity.properties file. 

You'll need to make sure your velocity context objects don't expose dangerous classes. Velocity Secure Uberspector will complain in those cases.

Mockito 2 upgrade

Status: COMPLETE

We've upgraded Mockito 2 to support testing with Java 11. Here's some things you might find useful when updating your plugins to be compatible with Mockito 2. 

ArgumentMatcher and Hamcrest now are different things

ArgumentMatcher used to be a hamcrest Matcher which extends BaseMatcher, now it is a separate interface.  You can still use hamcrest through  org.mockito.hamcrest.MockitoHamcrest   ensure there is hamcrest dependency on classpath. 

any(Foo.class) matchers do not match null

any() will match anything including null. This is the most significant change in the upgrade. You may find that nulls in your existing tests are uncovered when Mockito 2 makes matchers more strict. 

What we found in our tests...

There are cases when it makes sense for a method to take a nullable type, such as PermissionManager#hasPermission(User, Permission, Object), where the user being null represents an anonymous user. In other cases, the stubbing is not correct. So you can either to switch to use any() to match anything, or change the tests to fix the stubbings and make matcher check type when possible.

Here is a stubbings example that we needed to fix in one of our tests. In ` testCopyAttachments ` , attachments are copied from source draft to destination page, and we then verify if the size of attachments in source are the same as in destination. We call the method below: 

verify(mockAttachmentDao).saveNewAttachment(argThat(new AttachmentCopyMatcher(sourceAttachment)), any(InputStream.class))

 In the copyAttachment implementation, the input stream is grabbed from the original attachment:

    public void copyAttachment(Attachment attachment, ContentEntityObject destinationContent) throws IOException {
        ...

        try (InputStream data = getAttachmentData(attachment)) {
            saveAttachment(attachmentCopy, null, data);
        }
    }

The test failed to mock inputstream, which meant the verify method call would fail because any(InputStream.class) does not match null, and neither does null make sense. Stubbing the AttachmentDao#getAttachmentData method to return a mock input stream fixed the problem.

Unnecessary stubbings

In Mockito 2, Mockito JUnitRunner can detect unused stubbings and detect stubbing argument mismatches to drive cleaner tests. If you're not able to fix all these errors just yet, you can use `@MockitoJUnitRunner.Silent.class` to mute them. 

Atlassian-mail upgrade

Status: COMPLETE

com.atlassian.mail.queue.MailQueueItem no longer extends com.atlassian.core.task.Task which will lead to compile errors around task managers used in email notifications.

You will need to wrap the MailQueueItem in a lambda before passing it down to the task manager, for example:

taskManager.addTask(name, () -> item.send())


plugin-license-storage-lib library no longer supported

Status: COMPLETE

If your app bundles the deprecated plugin-license-storage-lib library from the Universal Plugin Manager (UPM), your add-on will not work with Confluence 7.0.

You will need to use UPM's licensing-api module, and remove references to the  old plugin-license-storage-lib library.

See Adding licensing support to your add-on for more information. Note: Use the versions provided by the application for the import packages; don't specify a version range for the import packages.



Implemented changes

In this section we'll provide details of changes we have implemented, organised by the milestone they are first available in. This will help you decide which milestone to use when testing.

Release Candidate - 2 September 2019

This release candidate contains a handful of final fixes and small changes. 

Embedded database change

Remote connections to the embedded H2 database are now only allowed in dev mode

Beta 2 - 26 August 2019

Minor bug fixes and improvements. 

Beta 1 - 16 August 2019

The bulk of our work on Confluence 7.0 has now wrapped up.  We'll continue to fix bugs and issues in the lead-up to the final release. 

See Confluence 7.0 beta release notes for a full summary of all the changes in this release. 

Mockito 2 upgrade

We've upgraded Confluence to use Mockito 2 to support testing with Java 11.  See the info above for some tips that may help when making your tests compatible. 

End of support for Webdav plugin

We have decided to end support for the WebDAV plugin in Confluence 7.0, and will remove the plugin completely in a future Confluence release. See End of Support Announcements for Confluence for more information. 

We've reversed our decision to end support for shortcut links. 

EAP 20 - 12 August 2019

Milestone 7.0.1-m149

Atlassian libraries and plugins upgraded in this milestone:

EAP 19 – 5 August 2019

Milestone 7.0.1-m140

We're beginning to wrap up all our changes for 7.0, and will be releasing a beta quite soon.

Atlassian libraries and plugins upgraded in this milestone:


EAP 18 – 29 July 2019

Milestone 7.0.1-m131

AUI 8 and jQuery upgrades

The upgrade of jQuery from 1.7.2 to 2.2.4 is now complete. The AUI 8 upgrade work is also nearly done – we're just working to resolve a few outstanding issues. If you notice a problem, raise an issue to let us know. 

These upgrades may affect any custom CSS on your Confluence site. If you've made CSS customizations, it's a good idea to start testing these to check if you need to make any modifications.

Platform 5 upgrades

This milestone contains a number of platform related upgrades. The complete list of maven dependencies for Confluence 7 can be found in the confluence-project pom

Atlassian libraries and plugins upgraded:

Third party libraries upgraded:

  • Spring framework →  5.1.7.RELEASE  (see Spring changes that may affect your plugin)
  • Guava → 26.0-jre
  • commons-lang3 → 3.9
  • Apache HttpCore → 4.4.11
  • jQuery → 2.2.4 (see JQuery changes that may affect your plugin)

Alternatives to direct access to Lucene

We've just published a new set of search tutorials that provide guidance on how to perform common search or index related tasks without accessing the Lucene API directly.  

EAP 17 – 22 July 2019

Milestone 7.0.1-m122

No significant changes in this milestone. 

EAP 16 – 15 July 2019

Milestone 7.0.1-m117

  • In this milestone, we've removed platform-specific Mobile CSS helper classes, like class="platform-android" and class="platform-ios". 
  • When accessing Confluence via mobile web, you can now add attachments to comments on any device. This was previously only available on iPhone devices.

EAP 15 – 8 July 2019

Milestone 7.0.1-m110

AUI and jQuery upgrade

We're continuing to work on upgrading AUI and jQuery. The AUI and jQuery changes will be in all EAP milestones from now on. We have a few known issues which we'll continue to work through over the next few releases.

Zepto replaced by jQuery in Confluence mobile

The Confluence Mobile UI now uses jQuery 2.2.4 instead of Zepto.js 0.8. This means the Confluence Mobile Web Plugin can pull in any dependencies from Confluence or the AUI plugin without the risk of polluting the global $ variable.

The Mobile Web view uses Backbone 0.9.2. The Backbone view extend method doesn't support jQuery object as an element property.

Backbone.View.extend({
    // ...
    el: $(".css-selector")[0] // native dom only for Backbone 0.9.2
    // ...
}


As part of this work, we've also removed the following Zepto-specific functions:

  • $.cookie has been replaced by AJS.cookie
  • $.visible() has been removed. Use $.filter(":visible").length instead.

If your app currently uses the Mobile Web Plugin, you may need to modify anything that's specific to Zepto.

Changes to file editing with custom SSO authenticators

We've changed the way Confluence handles the download and re-upload of files via the Companion app for instances with SSO (Single Sign On) authentication. If you manage or develop a custom SSO authenticator app, we recommend testing the Edit files experience to check your app is compatible with the changes. 

EAP 14 – 1 July 2019

Milestone 7.0.1-m103

There are no significant changes in this milestone.

Please note, this milestone doesn't contain any changes related to the AUI 8 upgrade. You can continue using 7.0.1-m92 until we release our next AUI 8 milestone.

EAP 13 – 24 June 2019

Milestone 7.0.1-m92

This milestone contains our latest batch of changes related to the AUI 8 upgrade:

  • $.fn.enable() and $.fn.disable() are now deprecated. We recommend using the new methods disableElement and enableElement from AMD module confluence/form-state-control. The web-resource has the key com.atlassian.confluence.plugins.confluence-frontend:form-state-control

As usual, we document these changes each week in our Confluence AUI upgrade guide. There are still a number of known issues, which we'll be fixing over the coming weeks. Some issues to be aware of:

  • The date picker component may not work correctly in the editor.
  • Some dropdown buttons have extra space between the title and chevron icon.
  • There may be some minor visual glitches in messages on the UPM screen.
  • Secondary tabs (for example, on the Space Details screen) render as bullet points instead of tabs.
  • After uploading a new plugin, the 'Upload new plugin' button may not appear.

EAP 12 – 17 June 2019

Milestone 7.0.1-m88

In this milestone we've added two new scheduled jobs that can be used to evict Synchrony change logs.

Related to this work, the editor will now ask users to confirm a page reload. This is to make sure we are able to sync changes back to the draft when someone leaves the editor unexpectedly. If your app performs a page reload in the editor for any reason, you should initiate this save.  Refer to the summary at the top of this page for details. 

There's a known issue in this milestone which can prevent Confluence from starting up after upgrading. This issue will be resolved in an upcoming milestone.

EAP 11 – 11 June 2019

Milestone 7.0.1-m82

Our work continues on the AUI 8 upgrade. Here are the latest changes that may affect your app:

  • The AJS.indexOf method is no longer available. Use native array methods instead,  such as [].indexOf, [].includes.

  • We can no longer guarantee the legacy AUI message CSS classes, such as warning, error, and success, will exist in Confluence 7.0. If your app needs to control the behaviour of the AUI message in Javascript, it should query the element with the new class (with the aui-message- prefix).

  • The AUI message now renders an icon automatically, and no longer hides the extra icon from the old template. To fix this, remove the extra icon html markup.

Head to our Confluence AUI upgrade guide for more details. We update this page each week to reflect our work in progress. Please note: EAP 9 (7.0.1-m60) is the only milestone that contains our AUI 8 changes.

EAP 10 – 3 June 2019

Milestone 7.0.1-m74

AUI and jQuery upgrade

We're continuing work on the upgrade to AUI 8.3.2 and jQuery 2.2.4, however these changes are not included in this week's milestone. We plan to release a more stable milestone with the AUI and jQuery changes in the coming weeks. In the meantime, use milestone 7.0.1-m60 to see some of our work in progress.

New post-upgrade landing page

We've added a new post-upgrade report to provide you with useful information about your upgrade. After upgrading Confluence, admins will be automatically directed to the page, and can access it from > General configuration > Latest upgrade report.

This feature is currently enabled by default as a system property dark feature. If you develop a third-party app, this may affect your builds. To disable the feature, use the system property -Datlassian.darkfeature.pulp.disable=true

CDN for Confluence Data Center

In this milestone we've added support for serving static assets from a CDN.  This feature is only available with a Data Center license.  There are some things you should check, to ensure your plugin is compatible. Refer to the summary at the top of this page for details. 

EAP 9 – 20 May 2019

Milestone 7.0.1-m60

This milestone contains our first batch of changes related to the AUI 8 upgrade:

  • AUI has been upgraded to 8.3.2.
  • Confluence now only provides jQuery 2.2.4. 
  • The Backbone library in the AUI plugin has now been upgraded, however the Confluence codebase will continue using 1.0.0. It's important that you do not request a version of Backbone directly from the AUI plugin, as this would conflict with the global Backbone provided by Confluence. Head to our Confluence AUI upgrade guide for detailed guidance on these changes.

The AUI message style has now been updated.

Click to see the change...
AUI message style before upgrade

AUI message style after upgrade


EAP 8 – 13 May 2019

Milestone 7.0.1-m52

No significant changes in this milestone. 

EAP 7 – 6 May 2019

Milestone 7.0.1-m38

No significant changes in this milestone.

EAP 6 – 29 April 2019

Milestone 7.0.1-m35

  • This milestone contains our first batch of changes to support Java 11. We have a few known issues which we'll continue to work through over the next few releases. 
  • Upgraded Web Resource Manager from 3.5 to 4.1
  • Upgraded Atlassian Scheduler from 2.0 to 3.0
  • Upgraded Fugue from 4.5 to 4.7
  • Upgraded Velocity HtmlSafe from 1.5 to 3.0

EAP 5 – 15 April 2019

Milestone 7.0.1-m18

  • We've now removed the Trackback and Referrers feature completely, which included removing the TRACKBACKLINKS and EXTRNLNKS database tables.

EAP 4 – 10 April 2019

Milestone 7.0.1-m13

  • The IM macro is now deprecated and will no longer appear in the macro browser. 
  • We have finished removing code deprecated in Confluence 5.x and earlier. See Deprecated code paths removed in 7.0 for the full list. 
  • There was a problem with 7.0.1-m11. This is now resolved and we've released m13.

EAP 3 – 2 April 2019

Milestone 7.0.1-m05

  • The Network macro and Space details macro are now deprecated, and will no longer appear in the macro browser.
  • The Hipchat integration has now been disabled by default for new Confluence installations. This will have no impact on existing installations.

EAP 2 – 25 March 2019

Milestone 7.0.1-m03

No significant changes in this milestone.

EAP 1 – 18 March 2019

Milestone 7.0.1-m02

  • The Activity stream gadget, Page gadget and Quicknav gadget are now deprecated, and will no longer appear in the macro browser.
  • The News gadget and Junit macro have now been removed completely.
  • The Attachment storage page will now be hidden for customers who are storing attachments in the file system.
  • We've removed the Orphaned pages view from the Space Tools page in the default theme. This means that listorphanedpages.action will stop working in any theme that used it.
  • There was a problem with the Linux installer in m01 – this is now resolved and we've released m02.


Looking for updated documentation? Check out the Confluence EAP space for the latest docs.

Did you know we’ve got a new developer community? Head to community.developer.atlassian.com/ to check it out! We’ll be posting in the announcements category if when new EAP releases are available.

Last modified on Nov 25, 2019

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.