Release Notes -- Apache Jackrabbit -- Version 2.18.5

Introduction
------------

This is Apache Jackrabbit(TM) 2.18.5, a fully compliant implementation of the
Content Repository for Java(TM) Technology API, version 2.0 (JCR 2.0) as
specified in the Java Specification Request 283 (JSR 283).

Apache Jackrabbit 2.18.5 is an incremental feature release based on
and compatible with earlier stable Jackrabbit 2.x releases. Jackrabbit
2.18.x releases are considered stable and targeted for production use.

The minimum Java version for this release is Java 8. See

  http://jackrabbit.apache.org/jcr/downloads.html
  
for maintenance versions that support earlier Java versions.


Changes in Jackrabbit 2.18.5
----------------------------

Improvement

    [JCR-4497] - pass computed args to surefire/failsafe invocations
    [JCR-4499] - Update jacoco dependency to 0.8.5 and align config with Oak
    [JCR-4500] - jcr-commons: enable coverage checks
    [JCR-4501] - jcr-commons: add test coverage for ISO8601 util
    [JCR-4502] - ISO8601: add convenience methods that do not require passing a Calendar, also support short format without ms information

Task

    [JCR-4496] - align ISO8601 class in tests with jcr-commons version
    [JCR-4504] - Update maven-bundle-plugin to 4.2.1
    [JCR-4505] - Update maven-assembly-plugin to 3.2.0
    [JCR-4506] - Update maven-jar-plugin to 3.2.0
    [JCR-4507] - Update spotbugs-maven-plugin to 3.1.12.2
    [JCR-4508] - Upgrade maven-scr-plugin to 1.26.2
    [JCR-4510] - Update Tika dependency to 1.23
    [JCR-4511] - Update slf4j dependency to 1.7.29
    [JCR-4512] - Update maven-scr-plugin to 1.26.4
    [JCR-4529] - Update tomcat dependency to 8.5.50
    [JCR-4531] - Update tomcat dependency to 8.5.51/7.0.100

For more detailed information about all the changes in this and other
Jackrabbit releases, please see the Jackrabbit issue tracker at

    https://issues.apache.org/jira/browse/JCR

Release Contents
----------------

This release consists of a single source archive packaged as a zip file.
The archive can be unpacked with the jar tool from your JDK installation.
See the README.txt file for instructions on how to build this release.

The source archive is accompanied by an SHA512 checksum and a
PGP signature that you can use to verify the authenticity of your
download. The public key used for the PGP signature can be found at
https://www.apache.org/dist/jackrabbit/KEYS.

About Apache Jackrabbit
-----------------------

Apache Jackrabbit is a fully conforming implementation of the Content
Repository for Java Technology API (JCR). A content repository is a
hierarchical content store with support for structured and unstructured
content, full text search, versioning, transactions, observation, and
more.

For more information, visit http://jackrabbit.apache.org/

About The Apache Software Foundation
------------------------------------

Established in 1999, The Apache Software Foundation provides organizational,
legal, and financial support for more than 140 freely-available,
collaboratively-developed Open Source projects. The pragmatic Apache License
enables individual and commercial users to easily deploy Apache software;
the Foundation's intellectual property framework limits the legal exposure
of its 3,800+ contributors.

For more information, visit http://www.apache.org/

Trademarks
----------

Apache Jackrabbit, Jackrabbit, Apache, the Apache feather logo, and the Apache
Jackrabbit project logo are trademarks of The Apache Software Foundation.
