Release Notes -- Apache Jackrabbit FileVault -- Version 3.4.6

Introduction
------------
The FileVault introduces a JCR repository to filesystem mapping. The mapping
is exposed by an API and used by the "FileVault Content Packages" which allow to
create portable packages of repository content.

The Vault Command Line Interface aka "vlt" provides a subversion like
utility to work and develop with repository content.


Changes in Jackrabbit FileVault 3.4.6
--------------------------------------

Release Notes - Jackrabbit FileVault - Version 3.4.6
This version requires Java 8
The bundles are backwards compatible with Oak 1.6 and Jackrabbit 2.14

Bug
    * [JCRVLT-421] - filevault-package-maven-plugin 1.1.2: Empty nodes (used for ordering only) outside filter lead to error
    * [JCRVLT-422] - filevault-package-maven-plugin 1.1.2: jackrabbit-emptyelements filter fails for nodes starting with numbers
    * [JCRVLT-430] - Potential NPE in PackageTypeValidator.validate(...)
    * [JCRVLT-436] - VLT-RCP bundle no longer working with older Jackrabbit/Oak versions
    * [JCRVLT-441] - CompressionUtilTest.testCompressibilityEstimation() and testCompressibility fail sometimes
    * [JCRVLT-444] - DiffTest failure on Windows
    * [JCRVLT-445] - FSRegisteredPackageTest leaks temp files
    * [JCRVLT-446] - AdvancedFilterValidatorTest.testFilterWithInvalidElements fails for non-english locale
Improvement
    * [JCRVLT-398] - Migrate Filevault to Git
    * [JCRVLT-419] - Feature/enable insecure https host
    * [JCRVLT-424] - Make compilable and Runnable with Java 14
    * [JCRVLT-426] - Add nodetype validator
    * [JCRVLT-427] - Allow installation of packages with hook for users without admin privileges
    * [JCRVLT-429] - Switch to bnd-maven-plugin
    * [JCRVLT-437] - VLT-RCP: allow to pass a filter.xml for more finegrained control
    * [JCRVLT-438] - VLT-RCP: Provide API
    * [JCRVLT-440] - Do not treat Throwables differently than PackageExceptions in Hooks
    * [JCRVLT-449] - VLT-RCP: Optionally persist tasks
    * [JCRVLT-451] - Upgrade to Jackrabbit 2.20.1 and Oak 1.32.0
    * [JCRVLT-453] - RepositoryCopier should not catch exceptions

Changes in Jackrabbit FileVault 3.4.4
--------------------------------------

Release Notes - Jackrabbit FileVault - Version 3.4.4
This version requires Java 8, Oak 1.20 and Jackrabbit 2.20.0

Bug
    * [JCRVLT-409] - Validation: Emit node names in expanded form
    * [JCRVLT-410] - PackageTypeValidator does not detect OSGi configurations of type sling:OsgiConfig
    * [JCRVLT-414] - Embedding of Woodstox leads to non-necessary Import-Package statements
    * [JCRVLT-415] - jackrabbit-emptyelements validator reports error for nested folders
    * [JCRVLT-417] - Intermediate Node Types should be default node type of parent node type definition instead of "nt:folder"

Improvement
    * [JCRVLT-400] - '/etc/packages' should be a valid root
    * [JCRVLT-401] - Clarify allowed contents of container package type
    * [JCRVLT-402] - Clarify error message for validator "jackrabbit-emptyelements"
    * [JCRVLT-406] - Improve logging of runtime exception in validators
    * [JCRVLT-411] - PackageTypeValidator: Optionally allow complex filters
    * [JCRVLT-413] - Clarify documentation about intermediate/ancestor nodes


Changes in Jackrabbit FileVault 3.4.2
--------------------------------------

Release Notes - Jackrabbit FileVault - Version 3.4.2
This version requires Java 8, Oak 1.20 and Jackrabbit 2.20.0

Bug fixes
    * [JCRVLT-343] - Check for index definitions also considers ACL entries
    * [JCRVLT-379] - CompressionUtilTest.testCompressibilityEstimation() fails sometimes
    * [JCRVLT-386] - Eclipse/m2e: Could not get metadata for dependencies which are resolved via m2e workspace resolution or for multimodule builds with phases < package
    * [JCRVLT-390] - filter based on content properties is not working

New Features
    * [JCRVLT-232] - Enforce constraints for package types
    * [JCRVLT-345] - Support pluggable node/file/filter validators

Improvements
    * [JCRVLT-187] - Expose PackageProperties from MetaInf and VaultPackage from Archive
    * [JCRVLT-361] - Validate that all includes/excludes are below the filter root
    * [JCRVLT-365] - Migrate from JSR 305 to Jetbrains annotations
    * [JCRVLT-368] - DefaultWorkspaceFilter.readFilter(Element) might throw j.u.r.PatternSyntaxException
    * [JCRVLT-369] - Include package name in error message when dependencies are not satisfied
    * [JCRVLT-371] - Include Maven groupId and artifactId of each dependency in the MANIFEST.MF and the properties.xml
    * [JCRVLT-376] - test cases leak 'vaulttest*zip' temp files
    * [JCRVLT-382] - DefaultWorkspaceFilter: Reset source for every modifying operation
    * [JCRVLT-384] - Document config.xml, settings.xml, nodetypes.cnd and privileges.xml below META-INF/vault
    * [JCRVLT-385] - AdvancedFilterValidator should also consider filter roots of nested subpackages
    * [JCRVLT-399] - Update to Jackrabbit 2.20.0 / Oak 1.20.0

Tasks
    * [JCRVLT-161] - Document FileVault Workspace Property filter
    * [JCRVLT-347] - Enable ignored principal-based ITs once Oak 1.18.0 is released
    * [JCRVLT-391] - Remove copied classes of Xerces
    * [JCRVLT-392] - Support Matrix builds on Windows/Linux with Travis
    * [JCRVLT-393] - Java 13 Build Support


Changes in Jackrabbit FileVault 3.4.0
--------------------------------------

Release Notes - Jackrabbit FileVault - Version 3.4.0
This version requires Java 8, Oak 1.16 and Jackrabbit 2.18.3

Bug fixes:
    * [JCRVLT-323] - Unable to perform sync due to wrong default workspace handling
    * [JCRVLT-338] - argLine getting overridden by parent pom and vault-core pom
    * [JCRVLT-341] - https doesn't work anymore
    * [JCRVLT-352] - File leak in Hook.init
    * [JCRVLT-359] - Provide separate option to control handling of rep:cugPolicy nodes
    * [JCRVLT-362] - ZipStreamArchive does not expose correct input source to the META-INF resources
    * [JCRVLT-367] - CLONE - vlt shell script prints out error when using openjdk

New Features:
    * [JCRVLT-340] - Adjust JackrabbitACLImporter to handle extensions provided by OAK-8190

Improvements:
    * [JCRVLT-287] - Throw exception in case of ACL Importer failures (instead of just logging)
    * [JCRVLT-336] - FSPackageRegistry should allow forced application scoping of PackageInstallations
    * [JCRVLT-339] - Add FSPackageRegistry support for hollow packages
    * [JCRVLT-346] - allow for custom security setup
    * [JCRVLT-348] - Implement AutoCloseable for classes which have a close method
    * [JCRVLT-349] - Clarify closing behaviour of input streams in methods getting it as argument
    * [JCRVLT-353] - Add constant for allowIndexDefinitions to PackageProperties
    * [JCRVLT-356] - Add equals and toString methods to DocViewNode and DocViewProperty
    * [JCRVLT-360] - Add equals and toString methods to DefaultWorkspaceFilter and FilterSet
    * [JCRVLT-364] - Upgrade jackrabbit and oak and use Java 8
    * [JCRVLT-366] - Allow loading DefaultWorkspaceFilter and AbstractConfig from DOM Element

Tasks:
    * [JCRVLT-344] - update version of jackrabbit and oak dependencies


Changes in Jackrabbit FileVault 3.2.8
-------------------------------------

Release Notes - Jackrabbit FileVault - Version 3.2.8

Bug fixes:
    * [JCRVLT-329] - FSPackageRegistry doesn't handle absolutely configured homepaths correct
    * [JCRVLT-334] - Regression of JCRVLT-271: Property names mixed case problem

Improvements:
    * [JCRVLT-332] - JcrPackageRegistry / JcrPackageImpl cannot deal with dependencies satisfied by FsPackageRegistry


Changes in Jackrabbit FileVault 3.2.6
-------------------------------------

Release Notes - Jackrabbit FileVault - Version 3.2.6

Improvement
   * [JCRVLT-141] - Log all activity to debug so that an activity log can be created
   * [JCRVLT-319] - Allow building of stacked ExecutionPlans


Changes in Jackrabbit FileVault 3.2.4
-------------------------------------

Release Notes - Jackrabbit FileVault - Version 3.2.4

Bug Fixes:
    * [JCRVLT-317] - Aggregate not recognized as XML if root element name followed by a newline

Improvements:
    * [JCRVLT-313] - Avoid opening VaultPackage to get RegisteredPackage in FSRegistry
    * [JCRVLT-314] - Optimize buildup & update flow of FSInstallState
    * [JCRVLT-318] - Allow FSPackageRegistry to be configured to absolute path
    * [JCRVLT-310] - FSRegistry: store package properties in metainfo


Changes in Jackrabbit FileVault 3.2.0
-------------------------------------

Release Notes - Jackrabbit FileVault - Version 3.2.0

Important Changes:
For the fix of JCRVLT-282 the embedded dependencies of jackrabbit-spi and jackrabbit-spi-commons were removed from the
vault-core bundle. This was required to keep the bundle Java 1.7 compatible and rather consume the libraries from the
running system. Since some of the exported APIs already contain references to the Jackrabbit SPI this was necessary.

Bug Fixes:
    * [JCRVLT-292] - Order of ACLs are altered on installation of content packages
    * [JCRVLT-293] - Failing tests when building vault-core with -Doak=true
    * [JCRVLT-294] - DocViewFormatTest fails on Windows
    * [JCRVLT-305] - DefaultWorkspaceFilter.add(nodeFilters) does not include properties

New Features:
    * [JCRVLT-180] - implement filesystem based persistence layer
    * [JCRVLT-271] - Support a CLI command to format vault xml files
    * [JCRVLT-289] - InstallHooks: Propagate exceptions also for phase INSTALL
    * [JCRVLT-300] - vlt-rcp: Support proxy

Improvements:
    * [JCRVLT-282] - Filevault bundle should be Java 1.7 Compatible
    * [JCRVLT-284] - Add support through environment var to directly control the line separator
    * [JCRVLT-286] - Markup in http://jackrabbit.apache.org/filevault/rcp.html broken
    * [JCRVLT-301] - Do not always skip installation of sub packages for older versions and log a WARN in case a subpackage is skipped
    * [JCRVLT-303] - Register namespace under a unique prefix in case of clash
    * [JCRVLT-304] - Add tests that cover combinations of node and property filters
    * [JCRVLT-306] - Document properties.xml format
    * [JCRVLT-277] - vault-davex: cleanup dependencies - suppression of commons-httpclient
    * [JCRVLT-309] - Create helper filter that allows to limit the installation paths


Changes in Jackrabbit FileVault 3.1.44
--------------------------------------

Release Notes - Jackrabbit FileVault - Version 3.1.44

Bug Fixes:
* [JCRVLT-184] - vlt shell script prints out error when using openjdk
* [JCRVLT-208] - Add support for package storage outside /etc/packages
* [JCRVLT-235] - Refuse to create snapshot for empty or root filters.
* [JCRVLT-247] - Java 9 Support
* [JCRVLT-250] - Test class "SimpleFileAggregateInPackage" not executed by default in maven-surefire-plugin
* [JCRVLT-257] - ZipException: invalid code lengths set
* [JCRVLT-258] - Default compression level incorrectly set to NO_COMPRESSION (0)
* [JCRVLT-265] - JcrPackageDefinition.getDependencies() might return an array with a null element
* [JCRVLT-266] - DocViewSaxFormatter does not always emit namespace declaration for "jcr"

Improvements:
* [JCRVLT-270] - Use Jackrabbit 2.16.1
* [JCRVLT-132] - Document enhanced document view format

Won't Fix:
* [JCRVLT-267] - Changing log level to info from error in JcrPackageregistry upload method in case a .jar resource doesn't contains jcr_root
* [JCRVLT-251] - Child nodes mentioned in parent node's docview xml are not cleared correctly during installation


Changes in Jackrabbit FileVault 3.1.42
--------------------------------------

Release Notes - Jackrabbit FileVault - Version 3.1.42

Bug Fixes:
* [JCRVLT-185] - JcrPackageManagerImpl#extract() javadoc mentions not existent "register" property
* [JCRVLT-186] - rcp fails to copy binaries correctly
* [JCRVLT-197] - AggregateImpl.includesProperty fails with multiple filter roots
* [JCRVLT-198] - Creating a package with specific path fails to import
* [JCRVLT-225] - vlt doesn't work anymore with latest jackrabbit
* [JCRVLT-226] - vlt doesn't work with java 9
* [JCRVLT-227] - Import fails if user does not have access to the root path

Improvements:
* [JCRVLT-170] - Introduce the concept of package types
* [JCRVLT-171] - Introduce the concept of Package Registry
* [JCRVLT-172] - Introduce Package Persistence Layer
* [JCRVLT-188] - Ensure that hollow packages still provide PackageProperties and JcrPackageDefinition.
* [JCRVLT-190] - Provide mechanism to install several packages at once
* [JCRVLT-191] - Make VaultPackage and JcrPackage AutoCloseable
* [JCRVLT-192] - Deprecated exact storage location (/etc/packages)
* [JCRVLT-196] - Add remapping support for other than renames
* [JCRVLT-220] - Include package type when assembling a package

Wont't Fix:
* [JCRVLT-200] - Vault should support suppressSnapshots property


Changes in Jackrabbit FileVault 3.1.40
--------------------------------------

Bug Fixes:
* [JCRVLT-155] - JcrPackage.isInstalled does not return false in case the package has been overwritten
* [JCRVLT-158] - Assert causing a NPE if executed
* [JCRVLT-176] - Package with non-deep filter removes node
* [JCRVLT-177] - jcr:content and its children not overwritten during installation of Simple File Aggregate

New Features:
* [JCRVLT-50] - Add support for "hollow" packages

Improvements:
* [JCRVLT-32] - Store package properties in the MANIFEST.MF for faster access
* [JCRVLT-163] - Avoid compressing incompressible binaries
* [JCRVLT-164] - Allow to define default compression level
* [JCRVLT-174] - Add support to pass source credentials in RcpServlet
* [JCRVLT-175] - Ensure RcpTask is clearing out sensitive data in toString statement
* [JCRVLT-181] - Create ZipStreamArchive
* [JCRVLT-183] - Switch to OSGi annotations

Changes in Jackrabbit FileVault 3.1.38
--------------------------------------

Bug Fixes:
* [JCRVLT-128] - System maintained cache nodes should be ignored
* [JCRVLT-137] - Importing packages with users that contain a rep:cache node fails
* [JCRVLT-143] - JcrPackage.extractSubpackages() aborts if subpackage already exists
* [JCRVLT-144] - Unable to perform checkout due to wrong default workspace handling
* [JCRVLT-146] - Package Manager should use osgiCompare to determine version order
* [JCRVLT-147] - Remove unused special jcr:xmltext handling in DocViewSAXFormatter
* [JCRVLT-149] - PermSize deprecation warning for java 1.8
* [JCRVLT-157] - Package import does not handle "Atomic Counter"
* [JCRVLT-162] - package installation should not fully open the package when retrieving the package id
* [JCRVLT-169] - Dependency handling doesn't work when package definition not loaded

New Features:
* [JCRVLT-139] - Add support for package installation listeners
* [JCRVLT-140] - Add support for extract subpackages without installing content
* [JCRVLT-136] - Add import option flags to enforce dependency checks
* [JCRVLT-153] - Enable baseline checking to enforce better export package checks

Improvements:
* [JCRVLT-133] - Avoid node.refresh()
* [JCRVLT-136] - Add import option flags to enforce dependency checks
* [JCRVLT-138] - Unzip test-packages for easier maintenance
* [JCRVLT-145] - Subpackage extraction should not add parent dependency if no content
* [JCRVLT-148] - Migrate org.apache.jackrabbit.vault.vault-davex to httpclient 4.x
* [JCRVLT-150] - Require min JDK 1.7
* [JCRVLT-152] - Reduce verbosity of package installation
* [JCRVLT-165] - Replace proprietary diffing for vlt client with google's diffutils
* [JCRVLT-168] - Update dependencies to stable versions

Changes in Jackrabbit FileVault 3.1.36
--------------------------------------
(version skipped)

Changes in Jackrabbit FileVault 3.1.34
--------------------------------------
(version skipped)

Changes in Jackrabbit FileVault 3.1.32
--------------------------------------
(version skipped)

Changes in Jackrabbit FileVault 3.1.30
--------------------------------------
Bug Fixes:
* [JCRVLT-106] Importing an user and children with UPDATE mode causes unnecessary warnings
* [JCRVLT-126] Content packages update content outside of their filters if ancestor node have binary property
* [JCRVLT-130] Installing package with versions fails if the node is checked in

Improvements:
* [JCRVLT-111] Add support for o.a.j.api.security.authorization.PrincipalSetPolicy
* [JCRVLT-129] Update commons-httpclient to 3.1

Changes in Jackrabbit FileVault 3.1.28
--------------------------------------
Bug Fixes:
* [JCRVLT-89] - JcrPackageImpl.uninstall() throws exception if snapshot is missing
* [JCRVLT-108] - Import of binaries fail because they cannot be converted to strings
* [JCRVLT-114] - Subpackage extraction that contains vlt:definitiion might already have installed state
* [JCRVLT-117] - Potential XSS problem in org.apache.jackrabbit.vault.util.HtmlProgressListener
* [JCRVLT-121] - Credential challenge incorrect for dst server in rcp

Improvements:
* [JCRVLT-105] - Use Node.setPrimaryType() when changing primary type.
* [JCRVLT-113] - Skip installation of sub packages if newer version is already present and installed
* [JCRVLT-116] - InstallHookProcessor.Hook should not only use TCCL as fallback
* [JCRVLT-120] - Allow to filter content properties based on property name and value
* [JCRVLT-122] - Avoid deprecated Item.save()

Changes in Jackrabbit FileVault 3.1.26
--------------------------------------
Bug Fixes:
* [JCRVLT-100] - FileVault requires access to root node
  ** [JCRVLT-99] - Creating a package using package manager API requires read access to root node
  ** [JCRVLT-101] - Importer.TxInfo : access to root node
  ** [JCRVLT-102] - DefaultWorkspaceFilter requires access to root node
  ** [JCRVLT-103] - JcrPackageDefinitionImpl always accesses root node
  ** [JCRVLT-104] - Access to root node in DocViewSAXImporter and JcrSysViewTransformer

Changes in Jackrabbit FileVault 3.1.24
--------------------------------------
Bug Fixes:
* [JCRVLT-91] - HTTPS Support for CLI
* [JCRVLT-92] - Package rewrap broken for packages smaller than 1mb since introduction of memory archive
* [JCRVLT-94] - [AccessControlHandling] Unexpected behavior of acHandling 'merge'
* [JCRVLT-96] - DefaultWorkspaceFilter.getImportMode(path) should find the closest filter root
* [JCRVLT-98] - Multivalued properties of users are saved as single valued properties

Tasks:
* [JCRVLT-93] - Install apache-rat-plugin for license header checks

Improvement:
* [JCRVLT-97] - Implement binaryless export

Changes in Jackrabbit FileVault 3.1.18
--------------------------------------
Bug Fixes:
* [JCRVLT-84] - Installhook processor should not recursively call itself
* [JCRVLT-86] - Unable to merge group-member if the member node name is different from its authorizable id.


Changes in Jackrabbit FileVault 3.1.16
--------------------------------------
Bug Fixes:
* [JCRVLT-21] - "Item is protected" error during vlt rcp copy operation
* [JCRVLT-60] - The "--filter <file>" parameter does not seem to work
* [JCRVLT-81] - FilterSet.equals is returning true for filter sets with distinct roots
* [JCRVLT-83] - vlt rcp does not map namespaces properly


Changes in Jackrabbit FileVault 3.1.14
--------------------------------------
Bug Fixes:
* [JCRVLT-63] - DocViewSAXImporter relies on implementation detail wrt authorizable Id
* [JCRVLT-64] - Nodes that have a user parent are not installed if they are in the same .content.xml as their parent
* [JCRVLT-65] - Packages of authorizable content rely on a stable authorizable path
* [JCRVLT-66] - Updating an exiting authorizable does not work if on different path (mode=merge)
* [JCRVLT-67] - rep:authorizableId might be removed on package install causing error in oak
* [JCRVLT-68] - Wrong JAVA_HOME default location for OSX Yosemite
* [JCRVLT-75] - Installing rep:policy on root node fails (regression of JCRVLT-71)
* [JCRVLT-76] - Installing 2 moved sibling authorizables fails (regression)
* [JCRVLT-77] - AdminPermissionChecker fails if user can't read itself.

Improvements:
* [JCRVLT-72] - Add support for global remapping content during package installation.
* [JCRVLT-57] - Update maven-scr-plugin to 1.19.0 to allow building with Java 8
* [JCRVLT-71] - Allow creation of ancestor user nodes when they are not explicitly included in a filter

Tasks:
* [JCRVLT-70] - Change exported JMX name of PackageManagerMBeanImpl


Changes in Jackrabbit FileVault 3.1.8
-------------------------------------
Bug Fixes:
* [JCRVLT-55] - vlt st should notify the user executed in a directory notunder vault control

Improvement:
* [JCRVLT-54] - [vault-rcp] Allow single task retrieval
* [JCRVLT-56] - Add support for oak system users

Tasks:
* [JCRVLT-52] - Set maven-compiler-plugin target/source version to 1.6


Changes in Jackrabbit FileVault 3.1.6
-------------------------------------
Bug Fixes:
* [JCRVLT-48] - BinMetaDir causes test failures in windows
* [JCRVLT-45] - Uninstallation of package fails if snapshot of sub-package is missing


Changes in Jackrabbit FileVault 3.1.2
-------------------------------------
New Features:
* New project documentation on http://jackrabbit.apache.org/filevault/index.html

Bug Fixes:
* [JCRVLT-43] - vault-doc has duplicate artifactId
* [JCRVLT-44] - Regression: child node order to respected for mixed aggregate parents

Improvements:
* [JCRVLT-19] - Document filter.xml format


Changes in Jackrabbit FileVault 3.1.0
-------------------------------------
New Features:
* [JCRVLT-25] - Implement AccessControlHandling MERGE and MERGE_PRESERVE
* [JCRVLT-30] - Allow package definition to specify recursive install behavior

Bug Fixes:
* [JCRVLT-17] - Provide better abstraction for install hook handling
* [JCRVLT-22] - Import of SNS content on not supporting repositories
* [JCRVLT-23] - Integration tests fail with Jackrabbit Oak
* [JCRVLT-24] - Childnode order not respected for detached full coverage sub aggregates
* [JCRVLT-26] - File vault stores passwords in clear text in ~/.vault/auth.xml
* [JCRVLT-27] - "vlt rcp" requires credentials as URL parameters
* [JCRVLT-34] - NPE in MemoryArchive
* [JCRVLT-36] - IllegalArgumentException while extracting subpackages
* [JCRVLT-37] - Regression: Order of ACE entries is not correct
* [JCRVLT-39] - Regression: installing a package with repository ACL fails
* [JCRVLT-41] - ImportMode=UPDATE deletes existing nodes
* [JCRVLT-42] - Do not allow creation of packages with illegal JCR names

Improvements:
* [JCRVLT-28] - Improve package import for subtrees
* [JCRVLT-31] - Packages defined by a stream are copied to a file first


Changes in Jackrabbit FileVault 3.0.0
-------------------------------------
New features:

    Version 3.0.0 is the initial version of this contribution to the Apache
    Jackrabbit project.

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

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

Bug Fixes:
* [JCR-3661] jcrvlt: String[]{""} not packaged correctly

Improvements:
* [JCR-3612] Contribute Adobe's FileVault to ASF
* [JCR-3649] FileVault: fix usage of @inheritDoc in constructor documentation
* [JCR-3666] FileVault: VaultFsConfig11 references incorrect classes from prior versions
* [JCR-3664] FileVault: fix javadoc for PlatformNameFormatter
* [JCR-3663] FileVault: tweak gitignore file
* [JCR-3648] FileVault: remove dependecyManagement entry for concurrent:concurrent
* [JCR-3647] FileVault: update maven-scr-plugin and maven-bundle-plugin versions

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 SHA1 and MD5 checksums 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 100 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 2,500+ 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.
