<?xml version="1.0" encoding="UTF-8"?>

<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  -->

<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>

  <parent>
    <groupId>org.apache.jackrabbit</groupId>
    <artifactId>oak-parent</artifactId>
    <version>0.6.1-SNAPSHOT</version>
    <relativePath>../oak-parent/pom.xml</relativePath>
  </parent>

  <artifactId>oak-jcr</artifactId>
  <name>Oak JCR Binding</name>
  <packaging>bundle</packaging>

  <properties>
    <known.issues>
      org.apache.jackrabbit.test.api.AddNodeTest#testSameNameSiblings<!-- OAK-203 -->
      org.apache.jackrabbit.test.api.SessionTest#testMoveConstraintViolationExceptionSrc<!--OAK-132-->
      org.apache.jackrabbit.test.api.SessionTest#testMoveConstraintViolationExceptionDest<!--OAK-132-->
      org.apache.jackrabbit.test.api.SessionTest#testSaveConstraintViolationException<!--OAK-66-->
      org.apache.jackrabbit.test.api.SessionTest#testHasCapability
      org.apache.jackrabbit.test.api.SessionTest#testMoveLockException
      org.apache.jackrabbit.test.api.SessionUUIDTest#testSaveReferentialIntegrityException<!--OAK-66-->
      org.apache.jackrabbit.test.api.SessionUUIDTest#testSaveMovedRefNode<!--OAK-66-->
      org.apache.jackrabbit.test.api.NodeTest#testRefreshInvalidItemStateException<!--OAK-141-->
      org.apache.jackrabbit.test.api.NodeTest#testRemoveNodeLockedItself
      org.apache.jackrabbit.test.api.NodeTest#testRemoveNodeParentLocked
      org.apache.jackrabbit.test.api.NodeUUIDTest#testSaveReferentialIntegrityException<!--OAK-66-->
      org.apache.jackrabbit.test.api.NodeUUIDTest#testSaveMovedRefNode<!--OAK-66-->
      org.apache.jackrabbit.test.api.NodeOrderableChildNodesTest#testOrderBeforeUnsupportedRepositoryOperationException<!--OAK-169-->
      org.apache.jackrabbit.test.api.SetValueValueFormatExceptionTest#testNodeNotReferenceable
      org.apache.jackrabbit.test.api.NodeSetPrimaryTypeTest#testLocked
      org.apache.jackrabbit.test.api.WorkspaceCopyReferenceableTest#testCopyNodesNewUUID
      org.apache.jackrabbit.test.api.WorkspaceCopyVersionableTest#testCopyNodesVersionableAndCheckedIn
      org.apache.jackrabbit.test.api.WorkspaceMoveReferenceableTest#testMoveNodesReferenceableNodesNewUUID
      org.apache.jackrabbit.test.api.WorkspaceMoveVersionableTest#testMoveNodesVersionableAndCheckedIn
      org.apache.jackrabbit.test.api.SessionRemoveItemTest#testRemoveLockedNode
      org.apache.jackrabbit.test.api.SessionRemoveItemTest#testRemoveLockedChildItem
      org.apache.jackrabbit.test.api.SessionRemoveItemTest#testRemoveCheckedInItem
      org.apache.jackrabbit.test.api.SetPropertyAssumeTypeTest#testValueConstraintViolationExceptionBecauseOfInvalidTypeParameter
      org.apache.jackrabbit.test.api.SetPropertyAssumeTypeTest#testValuesConstraintViolationExceptionBecauseOfInvalidTypeParameter
      org.apache.jackrabbit.test.api.SetPropertyAssumeTypeTest#testStringConstraintViolationExceptionBecauseOfInvalidTypeParameter
      org.apache.jackrabbit.test.api.NodeAddMixinTest#testAddInheritedMixin
      org.apache.jackrabbit.test.api.NodeAddMixinTest#testLocked
      org.apache.jackrabbit.test.api.NodeCanAddMixinTest#testLocked
      org.apache.jackrabbit.test.api.NodeRemoveMixinTest#testLocked
      org.apache.jackrabbit.test.api.ValueFactoryTest#testValueFormatException<!--OAK-204-->
      org.apache.jackrabbit.test.api.WorkspaceCopySameNameSibsTest
      org.apache.jackrabbit.test.api.WorkspaceCopyTest#testCopyNodesAccessDenied
      org.apache.jackrabbit.test.api.WorkspaceCopyTest#testCopyNodesLocked
      org.apache.jackrabbit.test.api.WorkspaceMoveSameNameSibsTest
      org.apache.jackrabbit.test.api.WorkspaceMoveTest#testMoveNodesLocked
      org.apache.jackrabbit.test.api.WorkspaceMoveTest#testMoveNodesAccessDenied
      org.apache.jackrabbit.test.api.CheckPermissionTest
      org.apache.jackrabbit.test.api.DocumentViewImportTest
      org.apache.jackrabbit.test.api.SerializationTest
      org.apache.jackrabbit.test.api.HasPermissionTest
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testAddInvalidLockToken
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testLockNonLockable
      org.apache.jackrabbit.test.api.lock.LockTest#testGetNode
      org.apache.jackrabbit.test.api.lock.LockTest#testAddRemoveLockToken
      org.apache.jackrabbit.test.api.lock.LockTest#testNodeLocked
      org.apache.jackrabbit.test.api.lock.LockTest#testGetLockOwnerProperty
      org.apache.jackrabbit.test.api.lock.LockTest#testGetLockOwner
      org.apache.jackrabbit.test.api.lock.LockTest#testShallowLock
      org.apache.jackrabbit.test.api.lock.LockTest#testParentChildLock
      org.apache.jackrabbit.test.api.lock.LockTest#testParentChildDeepLock
      org.apache.jackrabbit.test.api.lock.LockTest#testIsDeep
      org.apache.jackrabbit.test.api.lock.LockTest#testIsSessionScoped
      org.apache.jackrabbit.test.api.lock.LockTest#testLogout
      org.apache.jackrabbit.test.api.lock.LockTest#testLockTransfer
      org.apache.jackrabbit.test.api.lock.LockTest#testOpenScopedLocks
      org.apache.jackrabbit.test.api.lock.LockTest#testRefresh
      org.apache.jackrabbit.test.api.lock.LockTest#testRefreshNotLive
      org.apache.jackrabbit.test.api.lock.LockTest#testGetLock
      org.apache.jackrabbit.test.api.lock.LockTest#testMoveLocked
      org.apache.jackrabbit.test.api.lock.SetValueLockExceptionTest#testSetValueLockException
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testParentChildDeepLock
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testGetNodeOnLockObtainedFromChild
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testGetNodeOnLockObtainedFromNewChild
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testDeepLockAboveLockedChild
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testShallowLockAboveLockedChild
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testRemoveLockedChild
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testIsLive
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testIsDeep
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testIsSessionScoped
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testRefresh
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testRefreshNotLive
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testLockHoldingNode
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testNodeIsLocked
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testNodeHoldsLocked
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testLockVisibility
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testIsLockOwningSession
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testGetSecondsRemaining
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testGetSecondsRemainingAfterUnlock
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testLockExpiration
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testOwnerHint
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testUnlock
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testUnlockByOtherSession
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testIsLockedChild
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testIsLockedNewChild
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testHoldsLockChild
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testHoldsLockNewChild
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testGetLockOnChild
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testGetLockOnNewChild
      org.apache.jackrabbit.test.api.lock.DeepLockTest#testRemoveMixLockableFromLockedNode
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testLockTransfer
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testLockWithPendingChanges
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testNullOwnerHint
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testGetLockTokens
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testGetLockTokensAfterUnlock
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testGetLockTokensSessionScoped
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testAddLockToken
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testAddLockTokenToAnotherSession
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testRemoveLockToken
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testRemoveLockToken2
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testRemoveLockToken3
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testRemoveLockTokenTwice
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testAddLockTokenAgain
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testLockTransfer2
      org.apache.jackrabbit.test.api.lock.LockManagerTest#testLockTransfer3
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testGetLockToken
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testIsLive
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testIsDeep
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testIsSessionScoped
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testRefresh
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testRefreshNotLive
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testLockHoldingNode
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testNodeIsLocked
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testNodeHoldsLocked
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testLockVisibility
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testIsLockOwningSession
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testGetSecondsRemaining
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testGetSecondsRemainingAfterUnlock
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testLockExpiration
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testOwnerHint
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testUnlock
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testUnlockByOtherSession
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testIsLockedChild
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testIsLockedNewChild
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testHoldsLockChild
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testHoldsLockNewChild
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testGetLockOnChild
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testGetLockOnNewChild
      org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testRemoveMixLockableFromLockedNode
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testGetLockToken
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testImplicitUnlock
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testImplicitUnlock2
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testIsLive
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testIsDeep
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testIsSessionScoped
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testRefresh
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testRefreshNotLive
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testLockHoldingNode
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testNodeIsLocked
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testNodeHoldsLocked
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testLockVisibility
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testIsLockOwningSession
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testGetSecondsRemaining
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testGetSecondsRemainingAfterUnlock
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testLockExpiration
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testOwnerHint
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testUnlock
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testUnlockByOtherSession
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testIsLockedChild
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testIsLockedNewChild
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testHoldsLockChild
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testHoldsLockNewChild
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testGetLockOnChild
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testGetLockOnNewChild
      org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testRemoveMixLockableFromLockedNode
      org.apache.jackrabbit.test.api.nodetype.PropertyDefTest#testIsMandatory  <!-- OAK-66 -->
      org.apache.jackrabbit.test.api.LifecycleTest
      org.apache.jackrabbit.test.api.query.ElementTest#testElementTestNameTestSomeNTWithSNS          <!-- OAK-203 -->
      org.apache.jackrabbit.test.api.query.SaveTest#testItemExistsException                          <!-- OAK-203 -->
      org.apache.jackrabbit.test.api.query.SaveTest#testLockException
      org.apache.jackrabbit.test.api.query.SQLJoinTest#testJoin                                      <!-- OAK-474 -->
      org.apache.jackrabbit.test.api.query.SQLJoinTest#testJoinNtBase                                <!-- OAK-474 -->
      org.apache.jackrabbit.test.api.query.SQLJoinTest#testJoinFilterPrimaryType                     <!-- OAK-474 -->
      org.apache.jackrabbit.test.api.query.SQLJoinTest#testJoinSNS                                   <!-- OAK-474 -->
      org.apache.jackrabbit.test.api.query.SimpleSelectionTest#testSingleProperty                    <!-- OAK-323 -->
      org.apache.jackrabbit.test.api.query.qom.ColumnTest#testExpandColumnsForNodeType               <!-- OAK-323 -->
      org.apache.jackrabbit.test.api.query.GetPropertyNamesTest#testGetPropertyNames                 <!-- OAK-323 -->
      org.apache.jackrabbit.test.api.query.qom.SelectorTest#testUnknownNodeType                      <!-- OAK-476 -->
      org.apache.jackrabbit.test.api.query.qom.EquiJoinConditionTest#testRightOuterJoin1 <!-- bug in test case, see OAK-559 -->
      org.apache.jackrabbit.test.api.query.qom.EquiJoinConditionTest#testLeftOuterJoin2 <!-- bug in test case, see OAK-559 -->
      org.apache.jackrabbit.test.api.observation.EventTest#testGetUserId
      org.apache.jackrabbit.test.api.observation.NodeMovedTest#testMoveNode
      org.apache.jackrabbit.test.api.observation.NodeMovedTest#testMoveTree
      org.apache.jackrabbit.test.api.observation.NodeMovedTest#testMoveWithRemove
      org.apache.jackrabbit.test.api.observation.NodeReorderTest#testNodeReorderAddRemove           <!-- reorder not supported -->
      org.apache.jackrabbit.test.api.observation.NodeReorderTest#testNodeReorderMove                <!-- reorder not supported -->
      org.apache.jackrabbit.test.api.observation.NodeReorderTest#testNodeReorderSameName            <!-- reorder not supported -->
      org.apache.jackrabbit.test.api.observation.NodeReorderTest#testNodeReorderSameNameWithRemove  <!-- reorder not supported -->
      org.apache.jackrabbit.test.api.observation.AddEventListenerTest#testNoLocalTrue
      org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testNodeAdded
      org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testNodeMoved
      org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testNodeRemoved
      org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testPropertyAdded
      org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testPropertyChanged
      org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testPropertyRemoved
      org.apache.jackrabbit.test.api.observation.GetUserDataTest#testSave
      org.apache.jackrabbit.test.api.observation.GetUserDataTest#testWorkspaceOperation
      org.apache.jackrabbit.test.api.observation.AddEventListenerTest#testUUID
      org.apache.jackrabbit.test.api.observation.LockingTest#testAddLockToNode
      org.apache.jackrabbit.test.api.observation.LockingTest#testRemoveLockFromNode
      org.apache.jackrabbit.oak.jcr.security.user.EveryoneGroupTest#testMembers                                <!-- OAK-343 -->
      org.apache.jackrabbit.oak.jcr.security.user.FindAuthorizablesTest#testFindAuthorizableByAddedProperty    <!-- OAK-343 -->
      org.apache.jackrabbit.oak.jcr.security.user.FindAuthorizablesTest#testFindAuthorizableByRelativePath     <!-- OAK-343 -->
      org.apache.jackrabbit.oak.jcr.security.user.UserManagerTest#testGetNewAuthorizable                 <!-- OAK-343 -->
      org.apache.jackrabbit.oak.jcr.security.user.UserManagerTest#testCreateGroupWithExistingPrincipal2  <!-- OAK-343 -->
      org.apache.jackrabbit.oak.jcr.security.user.UserManagerTest#testCreateGroupWithExistingPrincipal3  <!-- OAK-343 -->
      org.apache.jackrabbit.oak.jcr.security.user.UserManagerTest#testEnforceAuthorizableFolderHierarchy <!-- OAK-343 -->
      org.apache.jackrabbit.oak.jcr.security.user.UserManagerTest#testCreateGroupWithExistingPrincipal2  <!-- OAK-343 -->
      org.apache.jackrabbit.oak.jcr.security.user.GroupTest#testDeeplyNestedGroups                       <!-- OAK-343 -->
      org.apache.jackrabbit.oak.jcr.security.user.GroupTest#testInheritedMembers                         <!-- OAK-343 -->
      org.apache.jackrabbit.oak.jcr.security.user.GroupTest#testCyclicGroups                             <!-- OAK-343 -->
      org.apache.jackrabbit.oak.jcr.security.user.AuthorizableTest#testRemoveListedAuthorizable          <!-- OAK-343 -->
    </known.issues>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <configuration>
          <instructions>
            <Export-Package>
              !
            </Export-Package>
            <Bundle-Activator>
              org.apache.jackrabbit.oak.jcr.osgi.Activator
            </Bundle-Activator>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <configuration>
            <excludes />
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <dependencies>
    <!-- Optional OSGi dependencies, used only when running within OSGi -->
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.core</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.compendium</artifactId>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.jcr</groupId>
      <artifactId>jcr</artifactId>
      <version>2.0</version>
    </dependency>

    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>oak-core</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>oak-commons</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-api</artifactId>
      <version>${jackrabbit.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-jcr-commons</artifactId>
      <version>${jackrabbit.version}</version>
    </dependency>

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${guava.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.6.4</version>
    </dependency>

    <!-- Findbugs annotations -->
    <dependency>
      <groupId>com.google.code.findbugs</groupId>
      <artifactId>jsr305</artifactId>
      <version>2.0.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- Test dependencies -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.3.158</version>
        <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-jcr-tests</artifactId>
      <version>${jackrabbit.version}</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-core</artifactId>
      <version>${jackrabbit.version}</version>
      <classifier>tests</classifier>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
