From 6d4a1af70a064c26390e0d43c8d0daa3f10aaf6c Mon Sep 17 00:00:00 2001
From: Adrian Damian <Adrian.Damian@nrc.ca>
Date: Mon, 22 Aug 2016 13:20:37 -0700
Subject: [PATCH] Converted to the gradle ecosystem

---
 .travis.yml                                   |   6 +
 cadcAccessControl-Admin/README.md             |  23 ---
 cadcAccessControl-Admin/build.gradle          |  42 +++++
 cadcAccessControl-Admin/build.xml             | 170 -----------------
 .../ca/nrc/cadc/ac/admin/AbstractCommand.java |   0
 .../nrc/cadc/ac/admin/AbstractListUsers.java  |   0
 .../cadc/ac/admin/AbstractUserCommand.java    |   0
 .../ca/nrc/cadc/ac/admin/ApproveUser.java     |   0
 .../ca/nrc/cadc/ac/admin/CmdLineParser.java   |   0
 .../ca/nrc/cadc/ac/admin/CommandRunner.java   |   0
 .../nrc/cadc/ac/admin/ContextFactoryImpl.java |   0
 .../ca/nrc/cadc/ac/admin/ContextImpl.java     |   0
 .../nrc/cadc/ac/admin/ListUserRequests.java   |   0
 .../java}/ca/nrc/cadc/ac/admin/ListUsers.java |   0
 .../java}/ca/nrc/cadc/ac/admin/Main.java      |   0
 .../ca/nrc/cadc/ac/admin/RejectUser.java      |   0
 .../ca/nrc/cadc/ac/admin/UsageException.java  |   0
 .../java}/ca/nrc/cadc/ac/admin/ViewUser.java  |   0
 .../nrc/cadc/ac/admin/CmdLineParserTest.java  |   0
 .../test/scripts/userAdminTest                |   3 -
 cadcAccessControl-Identity/build.gradle       |  31 +++
 cadcAccessControl-Identity/build.xml          | 119 ------------
 .../ca/nrc/cadc/auth/ACIdentityManager.java   |   0
 .../ca/nrc/cadc/auth/AuthenticatorImpl.java   |   0
 cadcAccessControl-Server/README.md            |  34 +---
 cadcAccessControl-Server/build.gradle         |  43 +++++
 cadcAccessControl-Server/build.xml            | 177 ------------------
 .../ac/server/ldap/AbstractLdapDAOTest.java   |   0
 .../nrc/cadc/ac/server/ldap/LdapDAOTest.java  |   0
 .../cadc/ac/server/ldap/LdapDAOTestImpl.java  |   0
 .../cadc/ac/server/ldap/LdapGroupDAOTest.java |   0
 .../cadc/ac/server/ldap/LdapUserDAOTest.java  |   0
 .../nrc/cadc/ac/server/ACScopeValidator.java  |   0
 .../cadc/ac/server/GroupDetailSelector.java   |   0
 .../nrc/cadc/ac/server/GroupPersistence.java  |   0
 .../ca/nrc/cadc/ac/server/PluginFactory.java  |   0
 .../nrc/cadc/ac/server/RequestValidator.java  |   0
 .../nrc/cadc/ac/server/UserPersistence.java   |   0
 .../cadc/ac/server/ldap/ConnectionPools.java  |   0
 .../nrc/cadc/ac/server/ldap/LdapConfig.java   |   0
 .../ac/server/ldap/LdapConnectionPool.java    |   0
 .../cadc/ac/server/ldap/LdapConnections.java  |   0
 .../ca/nrc/cadc/ac/server/ldap/LdapDAO.java   |   0
 .../nrc/cadc/ac/server/ldap/LdapGroupDAO.java |   0
 .../ac/server/ldap/LdapGroupPersistence.java  |   0
 .../cadc/ac/server/ldap/LdapPersistence.java  |   0
 .../nrc/cadc/ac/server/ldap/LdapUserDAO.java  |   0
 .../ac/server/ldap/LdapUserPersistence.java   |   0
 .../cadc/ac/server/web/ACSearchRunner.java    |   0
 .../nrc/cadc/ac/server/web/GroupServlet.java  |   0
 .../nrc/cadc/ac/server/web/LoginServlet.java  |   0
 .../ac/server/web/ModifyPasswordServlet.java  |   0
 .../ac/server/web/ResetPasswordServlet.java   |   0
 .../ca/nrc/cadc/ac/server/web/SyncOutput.java |   0
 .../ac/server/web/UserRequestServlet.java     |   0
 .../nrc/cadc/ac/server/web/UserServlet.java   |   7 +-
 .../ca/nrc/cadc/ac/server/web/WebUtil.java    |   0
 .../nrc/cadc/ac/server/web/WhoAmIServlet.java |   0
 .../web/groups/AbstractGroupAction.java       |   0
 .../web/groups/AddGroupMemberAction.java      |   0
 .../web/groups/AddUserMemberAction.java       |   0
 .../server/web/groups/CreateGroupAction.java  |   0
 .../server/web/groups/DeleteGroupAction.java  |   0
 .../ac/server/web/groups/GetGroupAction.java  |   0
 .../web/groups/GetGroupNamesAction.java       |   0
 .../ac/server/web/groups/GroupLogInfo.java    |   0
 .../web/groups/GroupsActionFactory.java       |   0
 .../server/web/groups/ModifyGroupAction.java  |   0
 .../web/groups/RemoveGroupMemberAction.java   |   0
 .../web/groups/RemoveUserMemberAction.java    |   0
 .../AbstractUserRequestAction.java            |   0
 .../userrequests/CreateUserRequestAction.java |   0
 .../UserRequestActionFactory.java             |   0
 .../server/web/users/AbstractUserAction.java  |   0
 .../ac/server/web/users/CreateUserAction.java |   0
 .../ac/server/web/users/DeleteUserAction.java |   0
 .../ac/server/web/users/GetUserAction.java    |   0
 .../server/web/users/GetUserListAction.java   |   0
 .../ac/server/web/users/ModifyUserAction.java |   0
 .../server/web/users/UserActionFactory.java   |   0
 .../cadc/ac/server/web/users/UserLogInfo.java |   0
 .../ca/nrc/cadc/auth/AuthenticatorImpl.java   |   0
 .../src/test/config/.dbrc                     |   2 +
 .../src/test/config/LdapConfig.properties     |  39 ++++
 .../test/config/testConfig.offline.properties |   4 +-
 .../config/testConfig.read-only.properties    |   4 +-
 .../test/config/testConfig1.properties        |   4 +-
 .../test/config/testConfig2.properties        |   4 +-
 .../cadc/ac/server/RequestValidatorTest.java  |   0
 .../cadc/ac/server/ldap/LdapConfigTest.java   |  26 ++-
 .../ac/server/ldap/LdapConnectionsTest.java   |   0
 .../ac/server/ldap/LdapPersistenceTest.java   |   0
 .../server/web/ModifyPasswordServletTest.java |   0
 .../server/web/ResetPasswordServletTest.java  |   0
 .../ac/server/web/UserLoginServletTest.java   |   0
 .../ac/server/web/UserRequestServletTest.java |   0
 .../cadc/ac/server/web/UserServletTest.java   |  49 ++++-
 .../cadc/ac/server/web/WhoAmIServletTest.java |   0
 .../web/groups/AddGroupMemberActionTest.java  |   0
 .../web/groups/AddUserMemberActionTest.java   |   0
 .../web/groups/DeleteGroupActionTest.java     |   0
 .../web/groups/GetGroupNamesActionTest.java   |   0
 .../web/groups/GroupActionFactoryTest.java    |   0
 .../groups/RemoveGroupMemberActionTest.java   |   0
 .../groups/RemoveUserMemberActionTest.java    |   0
 .../CreateUserRequestActionTest.java          |   0
 .../UserRequestActionFactoryTest.java         |   0
 .../web/users/CreateUserActionTest.java       |   0
 .../server/web/users/GetUserActionTest.java   |   0
 .../web/users/GetUserListActionTest.java      |   0
 .../web/users/ModifyUserActionTest.java       |   0
 .../web/users/UserActionFactoryTest.java      |   0
 .../test/resources/LocalAuthority.properties  |  15 ++
 .../test/LdapConfig.test.properties           |  38 ----
 cadcAccessControl/README.md                   |  20 --
 cadcAccessControl/build.xml                   | 161 ----------------
 .../{ => main/java}/ca/nrc/cadc/ac/AC.java    |   0
 .../java}/ca/nrc/cadc/ac/ActivatedGroup.java  |   0
 .../{ => main/java}/ca/nrc/cadc/ac/Group.java |   0
 .../cadc/ac/GroupAlreadyExistsException.java  |   0
 .../nrc/cadc/ac/GroupNotFoundException.java   |   0
 .../java}/ca/nrc/cadc/ac/GroupProperty.java   |   0
 .../java}/ca/nrc/cadc/ac/InternalID.java      |   0
 .../cadc/ac/MemberAlreadyExistsException.java |   0
 .../nrc/cadc/ac/MemberNotFoundException.java  |   0
 .../java}/ca/nrc/cadc/ac/PersonalDetails.java |   0
 .../java}/ca/nrc/cadc/ac/PosixDetails.java    |   0
 .../java}/ca/nrc/cadc/ac/ReaderException.java |   0
 .../{ => main/java}/ca/nrc/cadc/ac/Role.java  |   0
 .../{ => main/java}/ca/nrc/cadc/ac/User.java  |   0
 .../cadc/ac/UserAlreadyExistsException.java   |   0
 .../ca/nrc/cadc/ac/UserNotFoundException.java |   0
 .../java}/ca/nrc/cadc/ac/UserRequest.java     |   0
 .../java}/ca/nrc/cadc/ac/UserSet.java         |   0
 .../java}/ca/nrc/cadc/ac/WriterException.java |   0
 .../ca/nrc/cadc/ac/client/GMSClient.java      |   0
 .../ca/nrc/cadc/ac/client/GMSClientMain.java  |   0
 .../nrc/cadc/ac/client/GroupMemberships.java  |   0
 .../JsonUserListInputStreamWrapper.java       |   0
 .../ca/nrc/cadc/ac/client/UserClient.java     |   0
 .../ca/nrc/cadc/ac/json/JsonGroupReader.java  |   0
 .../ca/nrc/cadc/ac/json/JsonGroupWriter.java  |   0
 .../nrc/cadc/ac/json/JsonUserListReader.java  |   0
 .../nrc/cadc/ac/json/JsonUserListWriter.java  |   0
 .../ca/nrc/cadc/ac/json/JsonUserReader.java   |   0
 .../cadc/ac/json/JsonUserRequestReader.java   |   0
 .../cadc/ac/json/JsonUserRequestWriter.java   |   0
 .../ca/nrc/cadc/ac/json/JsonUserWriter.java   |   0
 .../nrc/cadc/ac/xml/AbstractReaderWriter.java |   0
 .../ca/nrc/cadc/ac/xml/GroupListReader.java   |   0
 .../ca/nrc/cadc/ac/xml/GroupListWriter.java   |   0
 .../java}/ca/nrc/cadc/ac/xml/GroupReader.java |   0
 .../java}/ca/nrc/cadc/ac/xml/GroupWriter.java |   0
 .../ca/nrc/cadc/ac/xml/UserListReader.java    |   0
 .../ca/nrc/cadc/ac/xml/UserListWriter.java    |   0
 .../java}/ca/nrc/cadc/ac/xml/UserReader.java  |   0
 .../ca/nrc/cadc/ac/xml/UserRequestReader.java |   0
 .../ca/nrc/cadc/ac/xml/UserRequestWriter.java |   0
 .../java}/ca/nrc/cadc/ac/xml/UserWriter.java  |   0
 .../ca/nrc/cadc/ac/GroupPropertyTest.java     |   0
 .../test/java}/ca/nrc/cadc/ac/GroupTest.java  |   0
 .../ca/nrc/cadc/ac/PersonalDetailsTest.java   |   0
 .../ca/nrc/cadc/ac/PosixDetailsTest.java      |   0
 .../test/java}/ca/nrc/cadc/ac/RoleTest.java   |   0
 .../test/java}/ca/nrc/cadc/ac/TestUtil.java   |   0
 .../java}/ca/nrc/cadc/ac/UserRequestTest.java |   0
 .../test/java}/ca/nrc/cadc/ac/UserTest.java   |   0
 .../ca/nrc/cadc/ac/client/GMSClientTest.java  |   0
 .../JsonUserListInputStreamWrapperTest.java   |   0
 .../ca/nrc/cadc/ac/client/UserClientTest.java |   0
 .../ac/json/JsonGroupReaderWriterTest.java    |   0
 .../ac/json/JsonUserListReaderWriterTest.java |   0
 .../ac/json/JsonUserReaderWriterTest.java     |   0
 .../json/JsonUserRequestReaderWriterTest.java |   0
 .../ac/xml/GroupListReaderWriterTest.java     |   0
 .../ac/xml/GroupPropertyReaderWriterTest.java |   0
 .../cadc/ac/xml/GroupReaderWriterTest.java    |   0
 .../cadc/ac/xml/IdentityReaderWriterTest.java |   0
 .../ac/xml/UserDetailsReaderWriterTest.java   |   0
 .../cadc/ac/xml/UserListReaderWriterTest.java |   0
 .../nrc/cadc/ac/xml/UserReaderWriterTest.java |   0
 .../ac/xml/UserRequestReaderWriterTest.java   |   0
 .../test/resources/LocalAuthority.properties  |  15 ++
 cadcTomcat/Dependencies.txt                   |  10 -
 cadcTomcat/build.gradle                       |  33 ++++
 cadcTomcat/build.xml                          | 144 --------------
 .../nrc/cadc/tomcat/AuthenticationLookup.java |   0
 .../cadc/tomcat/CadcBasicAuthenticator.java   |   0
 .../cadc/tomcat/CadcSSLImplementation.java    |   0
 .../nrc/cadc/tomcat/CadcSSLSocketFactory.java |   0
 .../nrc/cadc/tomcat/CadcX509TrustManager.java |   0
 .../tomcat/RealmMultiValuedProperties.java    |   0
 .../java}/ca/nrc/cadc/tomcat/RealmUtil.java   |   0
 .../resources/RegistryClient.properties       |   0
 .../test/config/RegistryClient.properties     |   0
 .../cadc/tomcat/AuthenticationLookupTest.java |   0
 .../tomcat/CadcBasicAuthenticatorTest.java    |   0
 197 files changed, 305 insertions(+), 918 deletions(-)
 create mode 100644 .travis.yml
 create mode 100644 cadcAccessControl-Admin/build.gradle
 delete mode 100644 cadcAccessControl-Admin/build.xml
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/AbstractCommand.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/AbstractListUsers.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/AbstractUserCommand.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/ApproveUser.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/CmdLineParser.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/CommandRunner.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/ContextFactoryImpl.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/ContextImpl.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/ListUserRequests.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/ListUsers.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/Main.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/RejectUser.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/UsageException.java (100%)
 rename cadcAccessControl-Admin/src/{ => main/java}/ca/nrc/cadc/ac/admin/ViewUser.java (100%)
 rename cadcAccessControl-Admin/{test/src => src/test/java}/ca/nrc/cadc/ac/admin/CmdLineParserTest.java (100%)
 delete mode 100755 cadcAccessControl-Admin/test/scripts/userAdminTest
 create mode 100644 cadcAccessControl-Identity/build.gradle
 delete mode 100644 cadcAccessControl-Identity/build.xml
 rename cadcAccessControl-Identity/src/{ => main/java}/ca/nrc/cadc/auth/ACIdentityManager.java (100%)
 rename cadcAccessControl-Identity/src/{ => main/java}/ca/nrc/cadc/auth/AuthenticatorImpl.java (100%)
 create mode 100644 cadcAccessControl-Server/build.gradle
 delete mode 100644 cadcAccessControl-Server/build.xml
 rename cadcAccessControl-Server/{test/src => src/integration/java}/ca/nrc/cadc/ac/server/ldap/AbstractLdapDAOTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/integration/java}/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/integration/java}/ca/nrc/cadc/ac/server/ldap/LdapDAOTestImpl.java (100%)
 rename cadcAccessControl-Server/{test/src => src/integration/java}/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/integration/java}/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/ACScopeValidator.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/GroupDetailSelector.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/GroupPersistence.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/PluginFactory.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/RequestValidator.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/UserPersistence.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/ldap/ConnectionPools.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/ldap/LdapConfig.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/ldap/LdapConnectionPool.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/ldap/LdapConnections.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/ldap/LdapDAO.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/ldap/LdapPersistence.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/ACSearchRunner.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/GroupServlet.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/LoginServlet.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/ModifyPasswordServlet.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/ResetPasswordServlet.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/SyncOutput.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/UserRequestServlet.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/UserServlet.java (99%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/WebUtil.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/WhoAmIServlet.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/groups/AbstractGroupAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/groups/AddGroupMemberAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/groups/AddUserMemberAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/groups/CreateGroupAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/groups/DeleteGroupAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/groups/GetGroupAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/groups/GetGroupNamesAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/groups/GroupLogInfo.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/groups/GroupsActionFactory.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/groups/ModifyGroupAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/groups/RemoveGroupMemberAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/userrequests/AbstractUserRequestAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/userrequests/CreateUserRequestAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/userrequests/UserRequestActionFactory.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/users/AbstractUserAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/users/CreateUserAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/users/DeleteUserAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/users/GetUserAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/users/GetUserListAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/users/ModifyUserAction.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/users/UserActionFactory.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/ac/server/web/users/UserLogInfo.java (100%)
 rename cadcAccessControl-Server/src/{ => main/java}/ca/nrc/cadc/auth/AuthenticatorImpl.java (100%)
 create mode 100644 cadcAccessControl-Server/src/test/config/.dbrc
 create mode 100644 cadcAccessControl-Server/src/test/config/LdapConfig.properties
 rename cadcAccessControl-Server/{ => src}/test/config/testConfig.offline.properties (92%)
 rename cadcAccessControl-Server/{ => src}/test/config/testConfig.read-only.properties (92%)
 rename cadcAccessControl-Server/{ => src}/test/config/testConfig1.properties (92%)
 rename cadcAccessControl-Server/{ => src}/test/config/testConfig2.properties (92%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/RequestValidatorTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/ldap/LdapConfigTest.java (93%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/ldap/LdapConnectionsTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/ldap/LdapPersistenceTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/ModifyPasswordServletTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/ResetPasswordServletTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/UserLoginServletTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/UserRequestServletTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/UserServletTest.java (75%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/WhoAmIServletTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/groups/AddGroupMemberActionTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/groups/AddUserMemberActionTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/groups/DeleteGroupActionTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/groups/GetGroupNamesActionTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/groups/GroupActionFactoryTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/groups/RemoveGroupMemberActionTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberActionTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/userrequests/CreateUserRequestActionTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/userrequests/UserRequestActionFactoryTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/users/CreateUserActionTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/users/GetUserActionTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/users/GetUserListActionTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/users/ModifyUserActionTest.java (100%)
 rename cadcAccessControl-Server/{test/src => src/test/java}/ca/nrc/cadc/ac/server/web/users/UserActionFactoryTest.java (100%)
 create mode 100644 cadcAccessControl-Server/src/test/resources/LocalAuthority.properties
 delete mode 100644 cadcAccessControl-Server/test/LdapConfig.test.properties
 delete mode 100644 cadcAccessControl/build.xml
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/AC.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/ActivatedGroup.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/Group.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/GroupAlreadyExistsException.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/GroupNotFoundException.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/GroupProperty.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/InternalID.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/MemberAlreadyExistsException.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/MemberNotFoundException.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/PersonalDetails.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/PosixDetails.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/ReaderException.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/Role.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/User.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/UserAlreadyExistsException.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/UserNotFoundException.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/UserRequest.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/UserSet.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/WriterException.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/client/GMSClient.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/client/GMSClientMain.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/client/GroupMemberships.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapper.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/client/UserClient.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/json/JsonGroupReader.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/json/JsonGroupWriter.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/json/JsonUserListReader.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/json/JsonUserListWriter.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/json/JsonUserReader.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/json/JsonUserRequestReader.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/json/JsonUserRequestWriter.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/json/JsonUserWriter.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/xml/AbstractReaderWriter.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/xml/GroupListReader.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/xml/GroupListWriter.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/xml/GroupReader.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/xml/GroupWriter.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/xml/UserListReader.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/xml/UserListWriter.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/xml/UserReader.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/xml/UserRequestReader.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/xml/UserRequestWriter.java (100%)
 rename cadcAccessControl/src/{ => main/java}/ca/nrc/cadc/ac/xml/UserWriter.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/GroupPropertyTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/GroupTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/PersonalDetailsTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/PosixDetailsTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/RoleTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/TestUtil.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/UserRequestTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/UserTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/client/GMSClientTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapperTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/client/UserClientTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/json/JsonGroupReaderWriterTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/json/JsonUserListReaderWriterTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/json/JsonUserReaderWriterTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/json/JsonUserRequestReaderWriterTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/xml/GroupListReaderWriterTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/xml/GroupPropertyReaderWriterTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/xml/GroupReaderWriterTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/xml/IdentityReaderWriterTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/xml/UserDetailsReaderWriterTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/xml/UserListReaderWriterTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/xml/UserReaderWriterTest.java (100%)
 rename cadcAccessControl/{test/src => src/test/java}/ca/nrc/cadc/ac/xml/UserRequestReaderWriterTest.java (100%)
 create mode 100644 cadcAccessControl/src/test/resources/LocalAuthority.properties
 delete mode 100644 cadcTomcat/Dependencies.txt
 create mode 100644 cadcTomcat/build.gradle
 delete mode 100644 cadcTomcat/build.xml
 rename cadcTomcat/src/{ => main/java}/ca/nrc/cadc/tomcat/AuthenticationLookup.java (100%)
 rename cadcTomcat/src/{ => main/java}/ca/nrc/cadc/tomcat/CadcBasicAuthenticator.java (100%)
 rename cadcTomcat/src/{ => main/java}/ca/nrc/cadc/tomcat/CadcSSLImplementation.java (100%)
 rename cadcTomcat/src/{ => main/java}/ca/nrc/cadc/tomcat/CadcSSLSocketFactory.java (100%)
 rename cadcTomcat/src/{ => main/java}/ca/nrc/cadc/tomcat/CadcX509TrustManager.java (100%)
 rename cadcTomcat/src/{ => main/java}/ca/nrc/cadc/tomcat/RealmMultiValuedProperties.java (100%)
 rename cadcTomcat/src/{ => main/java}/ca/nrc/cadc/tomcat/RealmUtil.java (100%)
 rename cadcTomcat/src/{ => main}/resources/RegistryClient.properties (100%)
 rename cadcTomcat/{ => src}/test/config/RegistryClient.properties (100%)
 rename cadcTomcat/{test/src => src/test/java}/ca/nrc/cadc/tomcat/AuthenticationLookupTest.java (100%)
 rename cadcTomcat/{test/src => src/test/java}/ca/nrc/cadc/tomcat/CadcBasicAuthenticatorTest.java (100%)

diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 00000000..7f23ba6b
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,6 @@
+language: java
+jdk:
+  - openjdk7
+  - oraclejdk8
+script: for mod in cadcAccessControl  cadcAccessControl-Admin  cadcAccessControl-Identity  cadcAccessControl-Server  cadcTomcat; do cd $mod; gradle assemble check install; cd ..; done
+
diff --git a/cadcAccessControl-Admin/README.md b/cadcAccessControl-Admin/README.md
index 3244e056..221b8a62 100644
--- a/cadcAccessControl-Admin/README.md
+++ b/cadcAccessControl-Admin/README.md
@@ -19,26 +19,3 @@ Where command is:
 -d|--debug                   : Debug mode print all the logging messages
 -h|--help                    : Print this message and exit
 ```
-
-## Depdencies
-
-### opencadc dependencies
-
-- opencadc/ac/cadcUtil
-- opencadc/ac/cadcLog
-- opencadc/ac/cadcAccessControl
-- opencadc/ac/cadcAccessControl-Server
-
-### external build dependencies
-- log4j.jar (log4j-1.2.17.jar)
-- commons-logging.jar
-- unboundid.jar
-- servlet-api
-- mail
-
-### external test dependencies
-- asm.jar (hibernate-3.2.3)
-- cglib.jar (hibernate-3.2.3)
-- easymock.jar (easymock-3.0.jar)
-- junit.jar (junit-4.6.jar)
-- objenesis.jar (objenesis-1.2.jar)
diff --git a/cadcAccessControl-Admin/build.gradle b/cadcAccessControl-Admin/build.gradle
new file mode 100644
index 00000000..84e21231
--- /dev/null
+++ b/cadcAccessControl-Admin/build.gradle
@@ -0,0 +1,42 @@
+plugins {
+    id 'java'
+    id 'maven'
+    id 'maven-publish'
+    id 'com.jfrog.bintray' version '1.7.1'
+}
+
+repositories {
+    jcenter()
+    mavenLocal()
+
+    // Only here until cadcUtil is in jcenter.
+    maven {
+        url  'http://dl.bintray.com/opencadc/software'
+    }
+}
+
+sourceCompatibility = 1.7
+group = 'opencadc'
+
+version = '1.0'
+
+dependencies {
+    compile 'log4j:log4j:1.2.+'
+    compile 'org.jdom:jdom2:2.+'
+    compile 'javax.servlet:javax.servlet-api:3.+'
+    compile 'xerces:xercesImpl:2.+'
+    compile 'com.unboundid:unboundid-ldapsdk:2.3.+'
+    compile 'commons-fileupload:commons-fileupload:1.3.+'
+    compile 'com.sun.mail:javax.mail:1.+'
+
+    compile 'opencadc:cadcUtil:1.+'
+    compile 'opencadc:cadcLog:1.+'
+    compile 'opencadc:cadcRegistry:1.+'
+    compile 'opencadc:cadcAccessControl:1.+'
+    compile 'opencadc:cadcAccessControl-Server:1.+'
+
+    testCompile 'junit:junit:4.+'
+    testCompile 'org.easymock:easymock:3.+'
+    testCompile 'xerces:xercesImpl:2.+'
+    testCompile 'org.skyscreamer:jsonassert:1.+'
+}
diff --git a/cadcAccessControl-Admin/build.xml b/cadcAccessControl-Admin/build.xml
deleted file mode 100644
index 39e69c89..00000000
--- a/cadcAccessControl-Admin/build.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-<!--
-************************************************************************
-*******************  CANADIAN ASTRONOMY DATA CENTRE  *******************
-**************  CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES  **************
-*
-*  (c) 2009.                            (c) 2009.
-*  Government of Canada                 Gouvernement du Canada
-*  National Research Council            Conseil national de recherches
-*  Ottawa, Canada, K1A 0R6              Ottawa, Canada, K1A 0R6
-*  All rights reserved                  Tous droits réservés
-*                                       
-*  NRC disclaims any warranties,        Le CNRC dénie toute garantie
-*  expressed, implied, or               énoncée, implicite ou légale,
-*  statutory, of any kind with          de quelque nature que ce
-*  respect to the software,             soit, concernant le logiciel,
-*  including without limitation         y compris sans restriction
-*  any warranty of merchantability      toute garantie de valeur
-*  or fitness for a particular          marchande ou de pertinence
-*  purpose. NRC shall not be            pour un usage particulier.
-*  liable in any event for any          Le CNRC ne pourra en aucun cas
-*  damages, whether direct or           être tenu responsable de tout
-*  indirect, special or general,        dommage, direct ou indirect,
-*  consequential or incidental,         particulier ou général,
-*  arising from the use of the          accessoire ou fortuit, résultant
-*  software.  Neither the name          de l'utilisation du logiciel. Ni
-*  of the National Research             le nom du Conseil National de
-*  Council of Canada nor the            Recherches du Canada ni les noms
-*  names of its contributors may        de ses  participants ne peuvent
-*  be used to endorse or promote        être utilisés pour approuver ou
-*  products derived from this           promouvoir les produits dérivés
-*  software without specific prior      de ce logiciel sans autorisation
-*  written permission.                  préalable et particulière
-*                                       par écrit.
-*                                       
-*  This file is part of the             Ce fichier fait partie du projet
-*  OpenCADC project.                    OpenCADC.
-*                                       
-*  OpenCADC is free software:           OpenCADC est un logiciel libre ;
-*  you can redistribute it and/or       vous pouvez le redistribuer ou le
-*  modify it under the terms of         modifier suivant les termes de
-*  the GNU Affero General Public        la “GNU Affero General Public
-*  License as published by the          License” telle que publiée
-*  Free Software Foundation,            par la Free Software Foundation
-*  either version 3 of the              : soit la version 3 de cette
-*  License, or (at your option)         licence, soit (à votre gré)
-*  any later version.                   toute version ultérieure.
-*                                       
-*  OpenCADC is distributed in the       OpenCADC est distribué
-*  hope that it will be useful,         dans l’espoir qu’il vous
-*  but WITHOUT ANY WARRANTY;            sera utile, mais SANS AUCUNE
-*  without even the implied             GARANTIE : sans même la garantie
-*  warranty of MERCHANTABILITY          implicite de COMMERCIALISABILITÉ
-*  or FITNESS FOR A PARTICULAR          ni d’ADÉQUATION À UN OBJECTIF
-*  PURPOSE.  See the GNU Affero         PARTICULIER. Consultez la Licence
-*  General Public License for           Générale Publique GNU Affero
-*  more details.                        pour plus de détails.
-*                                       
-*  You should have received             Vous devriez avoir reçu une
-*  a copy of the GNU Affero             copie de la Licence Générale
-*  General Public License along         Publique GNU Affero avec
-*  with OpenCADC.  If not, see          OpenCADC ; si ce n’est
-*  <http://www.gnu.org/licenses/>.      pas le cas, consultez :
-*                                       <http://www.gnu.org/licenses/>.
-*
-*  $Revision: 4 $
-*
-************************************************************************
--->
-
-
-<project default="build" basedir=".">
-
-  <property environment="env"/>
-  <property file="local.build.properties"/>
-
-  <!-- site-specific build properties or overrides of values in opencadc.properties -->
-  <property file="${env.CADC_PREFIX}/etc/local.properties" />
-  
-  <!-- site-specific targets, e.g. install, cannot duplicate those in opencadc.targets.xml -->
-  <import file="${env.CADC_PREFIX}/etc/local.targets.xml" optional="true" />
-  
-  <!-- default properties and targets -->
-  <property file="${env.CADC_PREFIX}/etc/opencadc.properties" />
-  <import file="${env.CADC_PREFIX}/etc/opencadc.targets.xml"/>
-  
-  <!-- developer convenience: place for extra targets and properties -->
-  <import file="extras.xml" optional="true" />
-  
-  <property file="local.build.properties"/>
-
-  <property name="project" value="cadcAccessControl-Admin"/>
-
-  <!-- JAR files to be included in classpath and war file -->
-  <property name="cadcAC" value="${lib}/cadcAccessControl.jar"/>
-  <property name="cadcAC-Server" value="${lib}/cadcAccessControl-Server.jar"/>
-  <property name="cadcReg" value="${lib}/cadcRegistry.jar"/>
-  <property name="cadcLog" value="${lib}/cadcLog.jar"/>
-  <property name="cadcUtil" value="${lib}/cadcUtil.jar"/>
-  <property name="log4j" value="${ext.lib}/log4j.jar"/>
-  <property name="commons-logging" value="${ext.lib}/commons-logging.jar"/>
-  <property name="unboundid" value="${ext.lib}/unboundid-ldapsdk-se.jar"/>
-  <property name="servlet-api" value="${ext.lib}/servlet-api.jar"/>
-  <property name="mail" value="${ext.lib}/mail.jar"/>
-
-  <property name="cadc" value="${cadcAC}:${cadcAC-Server}:${cadcUtil}"/>
-  <property name="client.cadc.jars" value="${cadcAC}:${cadcAC-Server}:${cadcLog}:${cadcUtil}:${cadcReg}"/>
-  <property name="client.external.jars" value="${unboundid}:${log4j}:${servlet-api}:${mail}"/>
-
-  <property name="jars" value="${cadc}:${client.cadc.jars}:${client.external.jars}"/>
-
-  <target name="copyResources" depends="compile">
-    <copy overwrite="true"
-      file="${env.A}/etc/LocalAuthority.properties"
-      tofile="${build}/class/LocalAuthority.properties"/>
-  </target>
-
-  <target name="build" depends="compile,copyResources,manifest">
-    <jar jarfile="${build}/lib/${project}.jar"
-         basedir="${build}/class" update="no"
-         manifest="${build}/tmp/${project}.mf">
-    </jar>
-  </target>
-
-  <target name="setup-test" depends="init">
-    <copy overwrite="true"
-          file="${env.A}/test-certificates/x509_CADCAuthtest1.pem"
-          tofile="build/test/class/cadcauthtest1.pem"/>
-  </target>
-
-  <target name="manifest">
-    <pathconvert property="client.flat.manifest" pathsep=" ">
-      <mapper type="flatten"/>
-      <path>
-        <pathelement path="${client.cadc.jars}"/>
-      </path>
-      <path>
-        <pathelement path="${client.external.jars}"/>
-      </path>
-    </pathconvert>
-    <pathconvert property="client.non-flat.manifest" pathsep=" ">
-      <path>
-        <pathelement path="${client.cadc.jars}"/>
-      </path>
-      <path>
-        <pathelement path="${client.external.jars}"/>
-      </path>
-    </pathconvert>
-
-    <manifest file="${build}/tmp/${project}.mf" mode="replace">
-      <attribute name="Main-Class" value="ca.nrc.cadc.ac.admin.Main"/>
-      <attribute name="Class-Path" value="${client.flat.manifest} ${client.non-flat.manifest}"/>
-    </manifest>
-  	
-  	<echo message="classpath: ${client.flat.manifest} ${client.non-flat.manifest}" />
-  </target>
-
-  <!-- JAR files needed to run the test suite -->
-  <property name="cadcLog" value="${lib}/cadcLog.jar"/>
-  <property name="asm"        value="${ext.dev}/asm.jar" />
-  <property name="cglib"      value="${ext.dev}/cglib.jar" />
-  <property name="easymock"   value="${ext.dev}/easymock.jar" />
-  <property name="junit"      value="${ext.dev}/junit.jar" />
-  <property name="objenesis"  value="${ext.dev}/objenesis.jar" />
-  <property name="jdom2" value="${ext.dev}/jdom2.jar"/>
-  <property name="json" value="${ext.dev}/json.jar" />
-  <property name="jsonassert" value="${ext.dev}/jsonassert.jar" />
-
-  <property name="testingJars" value="${jsonassert}:${junit}:${asm}:${cglib}:${easymock}:${objenesis}:${jdom2}:${json}:${cadcLog}"/>
-
-</project>
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/AbstractCommand.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/AbstractCommand.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/AbstractCommand.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/AbstractCommand.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/AbstractListUsers.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/AbstractListUsers.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/AbstractListUsers.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/AbstractListUsers.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/AbstractUserCommand.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/AbstractUserCommand.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/AbstractUserCommand.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/AbstractUserCommand.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/ApproveUser.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/ApproveUser.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/ApproveUser.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/ApproveUser.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/CmdLineParser.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/CmdLineParser.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/CmdLineParser.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/CmdLineParser.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/CommandRunner.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/CommandRunner.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/CommandRunner.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/CommandRunner.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/ContextFactoryImpl.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/ContextFactoryImpl.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/ContextFactoryImpl.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/ContextFactoryImpl.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/ContextImpl.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/ContextImpl.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/ContextImpl.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/ContextImpl.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/ListUserRequests.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/ListUserRequests.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/ListUserRequests.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/ListUserRequests.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/ListUsers.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/ListUsers.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/ListUsers.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/ListUsers.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/Main.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/Main.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/Main.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/Main.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/RejectUser.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/RejectUser.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/RejectUser.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/RejectUser.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/UsageException.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/UsageException.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/UsageException.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/UsageException.java
diff --git a/cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/ViewUser.java b/cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/ViewUser.java
similarity index 100%
rename from cadcAccessControl-Admin/src/ca/nrc/cadc/ac/admin/ViewUser.java
rename to cadcAccessControl-Admin/src/main/java/ca/nrc/cadc/ac/admin/ViewUser.java
diff --git a/cadcAccessControl-Admin/test/src/ca/nrc/cadc/ac/admin/CmdLineParserTest.java b/cadcAccessControl-Admin/src/test/java/ca/nrc/cadc/ac/admin/CmdLineParserTest.java
similarity index 100%
rename from cadcAccessControl-Admin/test/src/ca/nrc/cadc/ac/admin/CmdLineParserTest.java
rename to cadcAccessControl-Admin/src/test/java/ca/nrc/cadc/ac/admin/CmdLineParserTest.java
diff --git a/cadcAccessControl-Admin/test/scripts/userAdminTest b/cadcAccessControl-Admin/test/scripts/userAdminTest
deleted file mode 100755
index 1fe25d23..00000000
--- a/cadcAccessControl-Admin/test/scripts/userAdminTest
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-java -Dca.nrc.cadc.util.PropertiesReader.dir=test -Xmx128m -jar ${CADC_ROOT}/lib/userAdmin.jar $*
diff --git a/cadcAccessControl-Identity/build.gradle b/cadcAccessControl-Identity/build.gradle
new file mode 100644
index 00000000..47533be4
--- /dev/null
+++ b/cadcAccessControl-Identity/build.gradle
@@ -0,0 +1,31 @@
+plugins {
+    id 'java'
+    id 'maven'
+    id 'maven-publish'
+    id 'com.jfrog.bintray' version '1.7.1'
+}
+
+repositories {
+    jcenter()
+    mavenLocal()
+
+    // Only here until cadcUtil is in jcenter.
+    maven {
+        url  'http://dl.bintray.com/opencadc/software'
+    }
+}
+
+sourceCompatibility = 1.7
+group = 'opencadc'
+
+version = '1.0'
+
+dependencies {
+    compile 'log4j:log4j:1.2.+'
+
+    compile 'opencadc:cadcUtil:1.+'
+    compile 'opencadc:cadcLog:1.+'
+    compile 'opencadc:cadcRegistry:1.+'
+    compile 'opencadc:cadcVOSI:1.+'
+    compile 'opencadc:cadcAccessControl:1.+'
+}
diff --git a/cadcAccessControl-Identity/build.xml b/cadcAccessControl-Identity/build.xml
deleted file mode 100644
index b4e08ad9..00000000
--- a/cadcAccessControl-Identity/build.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<!--
-************************************************************************
-*******************  CANADIAN ASTRONOMY DATA CENTRE  *******************
-**************  CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES  **************
-*
-*  (c) 2009.                            (c) 2009.
-*  Government of Canada                 Gouvernement du Canada
-*  National Research Council            Conseil national de recherches
-*  Ottawa, Canada, K1A 0R6              Ottawa, Canada, K1A 0R6
-*  All rights reserved                  Tous droits réservés
-*
-*  NRC disclaims any warranties,        Le CNRC dénie toute garantie
-*  expressed, implied, or               énoncée, implicite ou légale,
-*  statutory, of any kind with          de quelque nature que ce
-*  respect to the software,             soit, concernant le logiciel,
-*  including without limitation         y compris sans restriction
-*  any warranty of merchantability      toute garantie de valeur
-*  or fitness for a particular          marchande ou de pertinence
-*  purpose. NRC shall not be            pour un usage particulier.
-*  liable in any event for any          Le CNRC ne pourra en aucun cas
-*  damages, whether direct or           être tenu responsable de tout
-*  indirect, special or general,        dommage, direct ou indirect,
-*  consequential or incidental,         particulier ou général,
-*  arising from the use of the          accessoire ou fortuit, résultant
-*  software.  Neither the name          de l'utilisation du logiciel. Ni
-*  of the National Research             le nom du Conseil National de
-*  Council of Canada nor the            Recherches du Canada ni les noms
-*  names of its contributors may        de ses  participants ne peuvent
-*  be used to endorse or promote        être utilisés pour approuver ou
-*  products derived from this           promouvoir les produits dérivés
-*  software without specific prior      de ce logiciel sans autorisation
-*  written permission.                  préalable et particulière
-*                                       par écrit.
-*
-*  This file is part of the             Ce fichier fait partie du projet
-*  OpenCADC project.                    OpenCADC.
-*
-*  OpenCADC is free software:           OpenCADC est un logiciel libre ;
-*  you can redistribute it and/or       vous pouvez le redistribuer ou le
-*  modify it under the terms of         modifier suivant les termes de
-*  the GNU Affero General Public        la “GNU Affero General Public
-*  License as published by the          License” telle que publiée
-*  Free Software Foundation,            par la Free Software Foundation
-*  either version 3 of the              : soit la version 3 de cette
-*  License, or (at your option)         licence, soit (à votre gré)
-*  any later version.                   toute version ultérieure.
-*
-*  OpenCADC is distributed in the       OpenCADC est distribué
-*  hope that it will be useful,         dans l’espoir qu’il vous
-*  but WITHOUT ANY WARRANTY;            sera utile, mais SANS AUCUNE
-*  without even the implied             GARANTIE : sans même la garantie
-*  warranty of MERCHANTABILITY          implicite de COMMERCIALISABILITÉ
-*  or FITNESS FOR A PARTICULAR          ni d’ADÉQUATION À UN OBJECTIF
-*  PURPOSE.  See the GNU Affero         PARTICULIER. Consultez la Licence
-*  General Public License for           Générale Publique GNU Affero
-*  more details.                        pour plus de détails.
-*
-*  You should have received             Vous devriez avoir reçu une
-*  a copy of the GNU Affero             copie de la Licence Générale
-*  General Public License along         Publique GNU Affero avec
-*  with OpenCADC.  If not, see          OpenCADC ; si ce n’est
-*  <http://www.gnu.org/licenses/>.      pas le cas, consultez :
-*                                       <http://www.gnu.org/licenses/>.
-*
-*  $Revision: 4 $
-*
-************************************************************************
--->
-
-<!DOCTYPE project>
-<project default="build" basedir=".">
-    <property environment="env"/>
-    <property file="local.build.properties" />
-
-    <!-- site-specific build properties or overrides of values in opencadc.properties -->
-    <property file="${env.CADC_PREFIX}/etc/local.properties" />
-
-    <!-- site-specific targets, e.g. install, cannot duplicate those in opencadc.targets.xml -->
-    <import file="${env.CADC_PREFIX}/etc/local.targets.xml" optional="true" />
-
-    <!-- default properties and targets -->
-    <property file="${env.CADC_PREFIX}/etc/opencadc.properties" />
-    <import file="${env.CADC_PREFIX}/etc/opencadc.targets.xml"/>
-
-    <!-- developer convenience: place for extra targets and properties -->
-    <import file="extras.xml" optional="true" />
-
-    <property name="project" value="cadcAccessControl-Identity" />
-
-    <property name="cadcUtil"          value="${lib}/cadcUtil.jar" />
-    <property name="cadcRegistry"      value="${lib}/cadcRegistry.jar" />
-	<property name="cadcLog"           value="${lib}/cadcLog.jar" />
-	<property name="cadcVOSI"          value="${lib}/cadcVOSI.jar" />
-	<property name="cadcAccessControl" value="${lib}/cadcAccessControl.jar" />
-
-    <property name="log4j"             value="${ext.lib}/log4j.jar" />
-
-    <property name="jars" value="${log4j}:${cadcUtil}:${cadcRegistry}:${cadcLog}:${cadcVOSI}:${cadcAccessControl}" />
-    
-    <target name="build" depends="compile">
-        <jar jarfile="${build}/lib/${project}.jar"
-                    basedir="${build}/class"
-                    update="no">
-                <include name="ca/nrc/cadc/**" />
-        </jar>
-    </target>
-
-    <!-- JAR files needed to run the test suite -->
-    <property name="xerces"     value="${ext.lib}/xerces.jar" />
-    <property name="asm"        value="${ext.dev}/asm.jar" />
-    <property name="cglib"      value="${ext.dev}/cglib.jar" />
-    <property name="easymock"   value="${ext.dev}/easymock.jar" />
-    <property name="junit"      value="${ext.dev}/junit.jar" />
-    <property name="objenesis"  value="${ext.dev}/objenesis.jar" />
-    <property name="jsonassert" value="${ext.dev}/jsonassert.jar" />
-    
-    <property name="testingJars" value="${build}/class:${jsonassert}:${jars}:${xerces}:${asm}:${cglib}:${easymock}:${junit}:${objenesis}" />
-
-</project>
diff --git a/cadcAccessControl-Identity/src/ca/nrc/cadc/auth/ACIdentityManager.java b/cadcAccessControl-Identity/src/main/java/ca/nrc/cadc/auth/ACIdentityManager.java
similarity index 100%
rename from cadcAccessControl-Identity/src/ca/nrc/cadc/auth/ACIdentityManager.java
rename to cadcAccessControl-Identity/src/main/java/ca/nrc/cadc/auth/ACIdentityManager.java
diff --git a/cadcAccessControl-Identity/src/ca/nrc/cadc/auth/AuthenticatorImpl.java b/cadcAccessControl-Identity/src/main/java/ca/nrc/cadc/auth/AuthenticatorImpl.java
similarity index 100%
rename from cadcAccessControl-Identity/src/ca/nrc/cadc/auth/AuthenticatorImpl.java
rename to cadcAccessControl-Identity/src/main/java/ca/nrc/cadc/auth/AuthenticatorImpl.java
diff --git a/cadcAccessControl-Server/README.md b/cadcAccessControl-Server/README.md
index 343fb4ef..25d73749 100644
--- a/cadcAccessControl-Server/README.md
+++ b/cadcAccessControl-Server/README.md
@@ -37,35 +37,9 @@ cadcAccessControl-Server has a default persistence layer built-in: LDAP.  Howeve
 | Who Am I - Logged-in user information | GET	| Returns information about the authentication user. | |
 | Service availability | GET | | |	
 
-## Dependencies
-
-### opencadc dependencies
-
-- opencadc/core/cadcUtil
-- opencadc/core/cadcLog
-- opencadc/reg/cadcRegistry
-- opencadc/uws/cadcUWS
-- opencadc/uws/cadcUWS-Server
-- opencadc/uws/cadcAccessControl
-
-### external build dependencies
-
-- json.jar (json.org-20110818)
-- jdom2 (jdom-2.0.5.jar)
-- xerces.jar (xerces-2_9_1)
-- log4j (log4j-1.2.17.jar)
-- servlet-api.jar (apache-tomcat-5.5.20)
-- unboundid-ldapsdk-se.jar (unboundid-ldapsdk-2.3.6-se)
-
-### external test dependencies
-- xerces.jar (xerces-2_9_1)
-- asm.jar (hibernate-3.2.3)
-- cglib.jar (hibernate-3.2.3)
-- easymock.jar (easymock-3.0.jar)
-- junit.jar (junit-4.6.jar)
-- objenesis.jar (objenesis-1.2.jar)
-- jsonassert.jar (jsonassert-1.2.3.jar)
-- commons-logging (commons-lang3-3.4.jar)
-
+## CONFIGURATION
+The service requires the following configuration files:
+.dbrc: stores data source configuration for the LDAP server
+ldap.properties: stores LDAP connection configuration
 
 
diff --git a/cadcAccessControl-Server/build.gradle b/cadcAccessControl-Server/build.gradle
new file mode 100644
index 00000000..300ab4ae
--- /dev/null
+++ b/cadcAccessControl-Server/build.gradle
@@ -0,0 +1,43 @@
+plugins {
+    id 'java'
+    id 'maven'
+    id 'maven-publish'
+    id 'com.jfrog.bintray' version '1.7.1'
+}
+
+repositories {
+    jcenter()
+    mavenLocal()
+
+    // Only here until cadcUtil is in jcenter.
+    maven {
+        url  'http://dl.bintray.com/opencadc/software'
+    }
+}
+
+sourceCompatibility = 1.7
+group = 'opencadc'
+
+version = '1.0'
+
+dependencies {
+    compile 'log4j:log4j:1.2.+'
+    compile 'org.jdom:jdom2:2.+'
+    compile 'org.json:json:20160212'
+    compile 'javax.servlet:javax.servlet-api:3.+'
+    compile 'xerces:xercesImpl:2.+'
+    compile 'com.unboundid:unboundid-ldapsdk:2.3.+'
+
+    compile 'opencadc:cadcAccessControl:1.+'
+    compile 'opencadc:cadcUtil:1.+'
+    compile 'opencadc:cadcLog:1.+'
+    compile 'opencadc:cadcRegistry:1.+'
+    compile 'opencadc:cadcUWS:1.+'
+    compile 'opencadc:cadcUWS-Server:1.+'
+
+    testCompile 'junit:junit:4.+'
+    testCompile 'org.easymock:easymock:3.+'
+    testCompile 'xerces:xercesImpl:2.+'
+    testCompile 'org.skyscreamer:jsonassert:1.+'
+    testCompile 'commons-logging:commons-logging:1.+'
+}
diff --git a/cadcAccessControl-Server/build.xml b/cadcAccessControl-Server/build.xml
deleted file mode 100644
index 9e3fd5ac..00000000
--- a/cadcAccessControl-Server/build.xml
+++ /dev/null
@@ -1,177 +0,0 @@
-<!--
-************************************************************************
-*******************  CANADIAN ASTRONOMY DATA CENTRE  *******************
-**************  CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES  **************
-*
-*  (c) 2009.                            (c) 2009.
-*  Government of Canada                 Gouvernement du Canada
-*  National Research Council            Conseil national de recherches
-*  Ottawa, Canada, K1A 0R6              Ottawa, Canada, K1A 0R6
-*  All rights reserved                  Tous droits réservés
-*
-*  NRC disclaims any warranties,        Le CNRC dénie toute garantie
-*  expressed, implied, or               énoncée, implicite ou légale,
-*  statutory, of any kind with          de quelque nature que ce
-*  respect to the software,             soit, concernant le logiciel,
-*  including without limitation         y compris sans restriction
-*  any warranty of merchantability      toute garantie de valeur
-*  or fitness for a particular          marchande ou de pertinence
-*  purpose. NRC shall not be            pour un usage particulier.
-*  liable in any event for any          Le CNRC ne pourra en aucun cas
-*  damages, whether direct or           être tenu responsable de tout
-*  indirect, special or general,        dommage, direct ou indirect,
-*  consequential or incidental,         particulier ou général,
-*  arising from the use of the          accessoire ou fortuit, résultant
-*  software.  Neither the name          de l'utilisation du logiciel. Ni
-*  of the National Research             le nom du Conseil National de
-*  Council of Canada nor the            Recherches du Canada ni les noms
-*  names of its contributors may        de ses  participants ne peuvent
-*  be used to endorse or promote        être utilisés pour approuver ou
-*  products derived from this           promouvoir les produits dérivés
-*  software without specific prior      de ce logiciel sans autorisation
-*  written permission.                  préalable et particulière
-*                                       par écrit.
-*
-*  This file is part of the             Ce fichier fait partie du projet
-*  OpenCADC project.                    OpenCADC.
-*
-*  OpenCADC is free software:           OpenCADC est un logiciel libre ;
-*  you can redistribute it and/or       vous pouvez le redistribuer ou le
-*  modify it under the terms of         modifier suivant les termes de
-*  the GNU Affero General Public        la “GNU Affero General Public
-*  License as published by the          License” telle que publiée
-*  Free Software Foundation,            par la Free Software Foundation
-*  either version 3 of the              : soit la version 3 de cette
-*  License, or (at your option)         licence, soit (à votre gré)
-*  any later version.                   toute version ultérieure.
-*
-*  OpenCADC is distributed in the       OpenCADC est distribué
-*  hope that it will be useful,         dans l’espoir qu’il vous
-*  but WITHOUT ANY WARRANTY;            sera utile, mais SANS AUCUNE
-*  without even the implied             GARANTIE : sans même la garantie
-*  warranty of MERCHANTABILITY          implicite de COMMERCIALISABILITÉ
-*  or FITNESS FOR A PARTICULAR          ni d’ADÉQUATION À UN OBJECTIF
-*  PURPOSE.  See the GNU Affero         PARTICULIER. Consultez la Licence
-*  General Public License for           Générale Publique GNU Affero
-*  more details.                        pour plus de détails.
-*
-*  You should have received             Vous devriez avoir reçu une
-*  a copy of the GNU Affero             copie de la Licence Générale
-*  General Public License along         Publique GNU Affero avec
-*  with OpenCADC.  If not, see          OpenCADC ; si ce n’est
-*  <http://www.gnu.org/licenses/>.      pas le cas, consultez :
-*                                       <http://www.gnu.org/licenses/>.
-*
-*  $Revision: 4 $
-*
-************************************************************************
--->
-
-<project name="cadcAccessControl-Server" default="build" basedir=".">
-
-  <property environment="env"/>
-  <property file="local.build.properties"/>
-
-  <!-- site-specific build properties or overrides of values in opencadc.properties -->
-  <property file="${env.CADC_PREFIX}/etc/local.properties"/>
-
-  <!-- site-specific targets, e.g. install, cannot duplicate those in opencadc.targets.xml -->
-  <import file="${env.CADC_PREFIX}/etc/local.targets.xml" optional="true"/>
-
-  <!-- default properties and targets -->
-  <property file="${env.CADC_PREFIX}/etc/opencadc.properties"/>
-  <import file="${env.CADC_PREFIX}/etc/opencadc.targets.xml"/>
-
-  <!-- developer convenience: place for extra targets and properties -->
-  <import file="extras.xml" optional="true"/>
-
-  <property name="project" value="cadcAccessControl-Server"/>
-
-  <property name="cadcAccessControl" value="${lib}/cadcAccessControl.jar"/>
-  <property name="cadcLog" value="${lib}/cadcLog.jar"/>
-  <property name="cadcRegistry" value="${lib}/cadcRegistry.jar"/>
-  <property name="cadcUtil" value="${lib}/cadcUtil.jar"/>
-  <property name="cadcUWS" value="${lib}/cadcUWS.jar"/>
-  <property name="cadcUWS-Server" value="${lib}/cadcUWS-Server.jar"/>
-  <property name="json" value="${ext.lib}/json.jar" />
-  <property name="jdom2" value="${ext.lib}/jdom2.jar"/>
-  <property name="log4j" value="${ext.lib}/log4j.jar"/>
-  <property name="servlet" value="${ext.lib}/servlet-api.jar"/>
-  <property name="unboundid" value="${ext.lib}/unboundid-ldapsdk-se.jar"/>
-  <property name="xerces" value="${ext.lib}/xerces.jar"/>
-
-  <property name="jars"
-            value="${jdom2}:${json}:${log4j}:${servlet}:${unboundid}:${xerces}:${cadcAccessControl}:${cadcLog}:${cadcRegistry}:${cadcUtil}:${cadcUWS}:${cadcUWS-Server}"/>
-
-  <target name="build" depends="compile">
-    <jar jarfile="${build}/lib/${project}.jar"
-         basedir="${build}/class"
-         update="no">
-      <include name="ca/nrc/cadc/**"/>
-    </jar>
-  </target>
-
-  <target name="setup-test" depends="init">
-    <mkdir dir="${user.home}/config" />
-    <copy overwrite="true" file="test/LdapConfig.test.properties"
-          todir="${user.home}/config/"/>
-    <copy overwrite="true"
-          file="${env.A}/etc/LocalAuthority.properties"
-          todir="${build}/test/class/"/>
-  </target>
-
-  <!-- JAR files needed to run the test suite -->
-  <property name="dev.junit" value="${ext.dev}/junit.jar"/>
-  <property name="dev.asm"            value="${ext.dev}/asm.jar" />
-  <property name="dev.cglib"          value="${ext.dev}/cglib.jar" />
-  <property name="dev.easyMock" value="${ext.dev}/easymock.jar"/>
-  <property name="dev.objenesis" value="${ext.dev}/objenesis.jar"/>
-  <property name="dev.jsonassert" value="${ext.dev}/jsonassert.jar" />
-  <property name="dev.mail"  value="${ext.dev}/mail.jar" />
-  <property name="lib.xerces" value="${ext.lib}/xerces.jar"/>
-  <property name="lib.commons-logging" value="${ext.lib}/commons-logging.jar"/>
-  <property name="testingJars" value="${lib.commons-logging}:${dev.junit}:${dev.jsonassert}:${dev.asm}:${dev.cglib}:${dev.easyMock}:${dev.objenesis}:${lib.xerces}:${dev.mail}"/>
-
-  <target name="single-test" depends="compile,compile-test">
-    <echo message="Running test suite..." />
-    <junit printsummary="yes" haltonfailure="yes" fork="yes">
-      <classpath>
-        <pathelement path="${build}/class"/>
-        <pathelement path="${build}/test/class"/>
-        <pathelement path="${jars}:${testingJars}"/>
-      </classpath>
-      <sysproperty key="ca.nrc.cadc.util.PropertiesReader.dir" value="test"/>
-
-      <!--<test name="ca.nrc.cadc.ac.server.ldap.LdapConfigTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.ldap.LdapConnectionsTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.ldap.LdapDAOTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.ldap.LdapGroupDAOTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.ldap.LdapPersistenceTest" />-->
-      <test name="ca.nrc.cadc.ac.server.ldap.LdapUserDAOTest" />
-
-      <!--<test name="ca.nrc.cadc.ac.server.web.groups.AddGroupMemberActionTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.groups.AddUserMemberActionTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.groups.DeleteGroupActionTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.groups.GetGroupNamesActionTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.groups.GroupActionFactoryTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.groups.RemoveGroupMemberActionTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.groups.RemoveUserMemberActionTest" />-->
-
-      <!--<test name="ca.nrc.cadc.ac.server.web.users.GetUserActionTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.users.GetUserListActionTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.users.ModifyUserActionTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.users.UserActionFactoryTest" />-->
-
-      <!--<test name="ca.nrc.cadc.ac.server.web.ModifyPasswordServletTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.ResetPasswordServletTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.UserLoginServletTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.UserServletTest" />-->
-      <!--<test name="ca.nrc.cadc.ac.server.web.WhoAmIServletTest" />-->
-
-      <!--<test name="ca.nrc.cadc.ac.server.RequestValidatorTest" />-->
-
-      <formatter type="plain" usefile="false" />
-    </junit>
-  </target>
-
-</project>
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/AbstractLdapDAOTest.java b/cadcAccessControl-Server/src/integration/java/ca/nrc/cadc/ac/server/ldap/AbstractLdapDAOTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/AbstractLdapDAOTest.java
rename to cadcAccessControl-Server/src/integration/java/ca/nrc/cadc/ac/server/ldap/AbstractLdapDAOTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java b/cadcAccessControl-Server/src/integration/java/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java
rename to cadcAccessControl-Server/src/integration/java/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapDAOTestImpl.java b/cadcAccessControl-Server/src/integration/java/ca/nrc/cadc/ac/server/ldap/LdapDAOTestImpl.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapDAOTestImpl.java
rename to cadcAccessControl-Server/src/integration/java/ca/nrc/cadc/ac/server/ldap/LdapDAOTestImpl.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java b/cadcAccessControl-Server/src/integration/java/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java
rename to cadcAccessControl-Server/src/integration/java/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java b/cadcAccessControl-Server/src/integration/java/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java
rename to cadcAccessControl-Server/src/integration/java/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ACScopeValidator.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ACScopeValidator.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ACScopeValidator.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ACScopeValidator.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/GroupDetailSelector.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/GroupDetailSelector.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/GroupDetailSelector.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/GroupDetailSelector.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/GroupPersistence.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/GroupPersistence.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/GroupPersistence.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/GroupPersistence.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/PluginFactory.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/PluginFactory.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/PluginFactory.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/PluginFactory.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/RequestValidator.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/RequestValidator.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/RequestValidator.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/RequestValidator.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/UserPersistence.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/UserPersistence.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/UserPersistence.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/UserPersistence.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/ConnectionPools.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/ConnectionPools.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/ConnectionPools.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/ConnectionPools.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConfig.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapConfig.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConfig.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapConfig.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnectionPool.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapConnectionPool.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnectionPool.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapConnectionPool.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnections.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapConnections.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnections.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapConnections.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapDAO.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapDAO.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapDAO.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapDAO.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapPersistence.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapPersistence.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapPersistence.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapPersistence.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/ACSearchRunner.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/ACSearchRunner.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupServlet.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/GroupServlet.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupServlet.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/GroupServlet.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/LoginServlet.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/LoginServlet.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/LoginServlet.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/LoginServlet.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ModifyPasswordServlet.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/ModifyPasswordServlet.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ModifyPasswordServlet.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/ModifyPasswordServlet.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ResetPasswordServlet.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/ResetPasswordServlet.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ResetPasswordServlet.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/ResetPasswordServlet.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/SyncOutput.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/SyncOutput.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/SyncOutput.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/SyncOutput.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/UserRequestServlet.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/UserRequestServlet.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/UserRequestServlet.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/UserRequestServlet.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/UserServlet.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/UserServlet.java
similarity index 99%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/UserServlet.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/UserServlet.java
index b63a25ec..d3b2a0bc 100644
--- a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/UserServlet.java
+++ b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/UserServlet.java
@@ -163,7 +163,7 @@ public class UserServlet extends HttpServlet
                 log.warn("No Privileged users configured.");
             }
 
-            PluginFactory pluginFactory = new PluginFactory();
+            PluginFactory pluginFactory = getPluginFactory();
             userPersistence = pluginFactory.createUserPersistence();
         }
         catch (Throwable t)
@@ -179,6 +179,11 @@ public class UserServlet extends HttpServlet
         userPersistence.destroy();
     }
 
+    protected PluginFactory getPluginFactory()
+    {
+        return new PluginFactory();
+    }
+
     /**
      * Create a UserAction and run the action safely.
      */
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/WebUtil.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/WebUtil.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/WebUtil.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/WebUtil.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/WhoAmIServlet.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/WhoAmIServlet.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/WhoAmIServlet.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/WhoAmIServlet.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/AbstractGroupAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/AbstractGroupAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/AbstractGroupAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/AbstractGroupAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/AddGroupMemberAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/AddGroupMemberAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/AddGroupMemberAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/AddGroupMemberAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/AddUserMemberAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/AddUserMemberAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/AddUserMemberAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/AddUserMemberAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/CreateGroupAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/CreateGroupAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/CreateGroupAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/CreateGroupAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/DeleteGroupAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/DeleteGroupAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/DeleteGroupAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/DeleteGroupAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/GetGroupAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/GetGroupAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/GetGroupAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/GetGroupAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/GetGroupNamesAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/GetGroupNamesAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/GetGroupNamesAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/GetGroupNamesAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/GroupLogInfo.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/GroupLogInfo.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/GroupLogInfo.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/GroupLogInfo.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/GroupsActionFactory.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/GroupsActionFactory.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/GroupsActionFactory.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/GroupsActionFactory.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/ModifyGroupAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/ModifyGroupAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/ModifyGroupAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/ModifyGroupAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/RemoveGroupMemberAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/RemoveGroupMemberAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/RemoveGroupMemberAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/RemoveGroupMemberAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/userrequests/AbstractUserRequestAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/userrequests/AbstractUserRequestAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/userrequests/AbstractUserRequestAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/userrequests/AbstractUserRequestAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/userrequests/CreateUserRequestAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/userrequests/CreateUserRequestAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/userrequests/CreateUserRequestAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/userrequests/CreateUserRequestAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/userrequests/UserRequestActionFactory.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/userrequests/UserRequestActionFactory.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/userrequests/UserRequestActionFactory.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/userrequests/UserRequestActionFactory.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/AbstractUserAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/AbstractUserAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/AbstractUserAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/AbstractUserAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/CreateUserAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/CreateUserAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/CreateUserAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/CreateUserAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/DeleteUserAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/DeleteUserAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/DeleteUserAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/DeleteUserAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/GetUserAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/GetUserAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/GetUserAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/GetUserAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/GetUserListAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/GetUserListAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/GetUserListAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/GetUserListAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/ModifyUserAction.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/ModifyUserAction.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/ModifyUserAction.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/ModifyUserAction.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/UserActionFactory.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/UserActionFactory.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/UserActionFactory.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/UserActionFactory.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/UserLogInfo.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/UserLogInfo.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/UserLogInfo.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/ac/server/web/users/UserLogInfo.java
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/auth/AuthenticatorImpl.java b/cadcAccessControl-Server/src/main/java/ca/nrc/cadc/auth/AuthenticatorImpl.java
similarity index 100%
rename from cadcAccessControl-Server/src/ca/nrc/cadc/auth/AuthenticatorImpl.java
rename to cadcAccessControl-Server/src/main/java/ca/nrc/cadc/auth/AuthenticatorImpl.java
diff --git a/cadcAccessControl-Server/src/test/config/.dbrc b/cadcAccessControl-Server/src/test/config/.dbrc
new file mode 100644
index 00000000..8b282708
--- /dev/null
+++ b/cadcAccessControl-Server/src/test/config/.dbrc
@@ -0,0 +1,2 @@
+#LDAP server   user DN                                    password
+devLdap        uid=testuser,ou=testorg,dc=test            secret      NA      NA
diff --git a/cadcAccessControl-Server/src/test/config/LdapConfig.properties b/cadcAccessControl-Server/src/test/config/LdapConfig.properties
new file mode 100644
index 00000000..07c273aa
--- /dev/null
+++ b/cadcAccessControl-Server/src/test/config/LdapConfig.properties
@@ -0,0 +1,39 @@
+###############################################################
+#
+# Test ldap config #1
+#
+#
+###############################################################
+
+# Read-only connection pool
+readOnly.servers = server1 server2 server3
+readOnly.poolInitSize = 3
+readOnly.poolMaxSize = 8
+readOnly.poolPolicy = roundRobin
+readOnly.maxWait = 30000
+readOnly.createIfNeeded = false
+
+# Read-write connection pool
+readWrite.servers = server4 server5
+readWrite.poolInitSize = 4
+readWrite.poolMaxSize = 9
+readWrite.poolPolicy = fewestConnections
+readWrite.maxWait = 30000
+readWrite.createIfNeeded = false
+
+# Unbound-Read-only connection pool
+unboundReadOnly.servers = server1 server2 server3
+unboundReadOnly.poolInitSize = 3
+unboundReadOnly.poolMaxSize = 8
+unboundReadOnly.poolPolicy = roundRobin
+unboundReadOnly.maxWait = 30000
+unboundReadOnly.createIfNeeded = false
+
+# server configuration -- applies to all servers
+dbrcHost = devLdap
+port = 389
+proxyUser = uid=testuser,ou=testorg,dc=test
+usersDN = usersDN
+userRequestsDN = userRequestsDN
+groupsDN = groupsDN
+adminGroupsDN = adminGroupsDN
diff --git a/cadcAccessControl-Server/test/config/testConfig.offline.properties b/cadcAccessControl-Server/src/test/config/testConfig.offline.properties
similarity index 92%
rename from cadcAccessControl-Server/test/config/testConfig.offline.properties
rename to cadcAccessControl-Server/src/test/config/testConfig.offline.properties
index 55e58b1e..1cec44de 100644
--- a/cadcAccessControl-Server/test/config/testConfig.offline.properties
+++ b/cadcAccessControl-Server/src/test/config/testConfig.offline.properties
@@ -32,8 +32,8 @@ unboundReadOnly.createIfNeeded = false
 # server configuration -- applies to all servers
 dbrcHost = devLdap
 port = 389
-proxyUser = uid=testproxy,ou=SpecialUsers,dc=testcanfar
+proxyUser = uid=testuser,ou=testorg,dc=test
 usersDN = usersDN
 userRequestsDN = userRequestsDN
 groupsDN = groupsDN
-adminGroupsDN = adminGroupsDN
\ No newline at end of file
+adminGroupsDN = adminGroupsDN
diff --git a/cadcAccessControl-Server/test/config/testConfig.read-only.properties b/cadcAccessControl-Server/src/test/config/testConfig.read-only.properties
similarity index 92%
rename from cadcAccessControl-Server/test/config/testConfig.read-only.properties
rename to cadcAccessControl-Server/src/test/config/testConfig.read-only.properties
index fdeda5e6..1acc7a2c 100644
--- a/cadcAccessControl-Server/test/config/testConfig.read-only.properties
+++ b/cadcAccessControl-Server/src/test/config/testConfig.read-only.properties
@@ -32,8 +32,8 @@ unboundReadOnly.createIfNeeded = false
 # server configuration -- applies to all servers
 dbrcHost = devLdap
 port = 389
-proxyUser = uid=testproxy,ou=SpecialUsers,dc=testcanfar
+proxyUser = uid=testuser,ou=testorg,dc=test
 usersDN = usersDN
 userRequestsDN = userRequestsDN
 groupsDN = groupsDN
-adminGroupsDN = adminGroupsDN
\ No newline at end of file
+adminGroupsDN = adminGroupsDN
diff --git a/cadcAccessControl-Server/test/config/testConfig1.properties b/cadcAccessControl-Server/src/test/config/testConfig1.properties
similarity index 92%
rename from cadcAccessControl-Server/test/config/testConfig1.properties
rename to cadcAccessControl-Server/src/test/config/testConfig1.properties
index 130f087b..07c273aa 100644
--- a/cadcAccessControl-Server/test/config/testConfig1.properties
+++ b/cadcAccessControl-Server/src/test/config/testConfig1.properties
@@ -32,8 +32,8 @@ unboundReadOnly.createIfNeeded = false
 # server configuration -- applies to all servers
 dbrcHost = devLdap
 port = 389
-proxyUser = uid=testproxy,ou=SpecialUsers,dc=testcanfar
+proxyUser = uid=testuser,ou=testorg,dc=test
 usersDN = usersDN
 userRequestsDN = userRequestsDN
 groupsDN = groupsDN
-adminGroupsDN = adminGroupsDN
\ No newline at end of file
+adminGroupsDN = adminGroupsDN
diff --git a/cadcAccessControl-Server/test/config/testConfig2.properties b/cadcAccessControl-Server/src/test/config/testConfig2.properties
similarity index 92%
rename from cadcAccessControl-Server/test/config/testConfig2.properties
rename to cadcAccessControl-Server/src/test/config/testConfig2.properties
index 67c822c2..42fe8ae7 100644
--- a/cadcAccessControl-Server/test/config/testConfig2.properties
+++ b/cadcAccessControl-Server/src/test/config/testConfig2.properties
@@ -32,8 +32,8 @@ unboundReadOnly.createIfNeeded = false
 # server configuration -- applies to all servers
 dbrcHost = devLdap
 port = 389
-proxyUser = uid=testproxy,ou=SpecialUsers,dc=testcanfar
+proxyUser = uid=testuser,ou=testorg,dc=test
 usersDN = usersDN
 userRequestsDN = userRequestsDN
 groupsDN = groupsDN
-adminGroupsDN = adminGroupsDN
\ No newline at end of file
+adminGroupsDN = adminGroupsDN
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/RequestValidatorTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/RequestValidatorTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/RequestValidatorTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/RequestValidatorTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapConfigTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapConfigTest.java
similarity index 93%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapConfigTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapConfigTest.java
index e51317e0..36b4389d 100644
--- a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapConfigTest.java
+++ b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapConfigTest.java
@@ -95,12 +95,13 @@ public class LdapConfigTest
     {
         try
         {
-            System.setProperty(PropertiesReader.class.getName() + ".dir", "test/config");
+            System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/config");
+            System.setProperty("user.home", "src/test/config");
 
             LdapConfig c = LdapConfig.loadLdapConfig("testConfig1.properties");
             Assert.assertEquals("devLdap", c.getDbrcHost());
             Assert.assertEquals(389, c.getPort());
-            Assert.assertEquals("uid=testproxy,ou=SpecialUsers,dc=testcanfar", c.getProxyUserDN());
+            Assert.assertEquals("uid=testuser,ou=testorg,dc=test", c.getProxyUserDN());
             Assert.assertEquals("usersDN", c.getUsersDN());
             Assert.assertEquals("userRequestsDN", c.getUserRequestsDN());
             Assert.assertEquals("groupsDN", c.getGroupsDN());
@@ -138,12 +139,13 @@ public class LdapConfigTest
     {
         try
         {
-            System.setProperty(PropertiesReader.class.getName() + ".dir", "test/config");
+            System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/config");
+            System.setProperty("user.home", "src/test/config");
 
             LdapConfig c = LdapConfig.loadLdapConfig("testConfig2.properties");
             Assert.assertEquals("devLdap", c.getDbrcHost());
             Assert.assertEquals(389, c.getPort());
-            Assert.assertEquals("uid=testproxy,ou=SpecialUsers,dc=testcanfar", c.getProxyUserDN());
+            Assert.assertEquals("uid=testuser,ou=testorg,dc=test", c.getProxyUserDN());
             Assert.assertEquals("usersDN", c.getUsersDN());
             Assert.assertEquals("userRequestsDN", c.getUserRequestsDN());
             Assert.assertEquals("groupsDN", c.getGroupsDN());
@@ -181,7 +183,8 @@ public class LdapConfigTest
     {
         try
         {
-            System.setProperty(PropertiesReader.class.getName() + ".dir", "test/config");
+            System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/config");
+            System.setProperty("user.home", "src/test/config");
 
             LdapConfig c1 = LdapConfig.loadLdapConfig("testConfig1.properties");
             LdapConfig c2 = LdapConfig.loadLdapConfig("testConfig1.properties");
@@ -190,6 +193,7 @@ public class LdapConfigTest
         catch (Throwable t)
         {
             log.error("Unexpected exception", t);
+            t.printStackTrace();
             Assert.fail("Unexpected exception: " + t.getMessage());
         }
         finally
@@ -203,7 +207,8 @@ public class LdapConfigTest
     {
         try
         {
-            System.setProperty(PropertiesReader.class.getName() + ".dir", "test/config");
+            System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/config");
+            System.setProperty("user.home", "src/test/config");
 
             LdapConfig c1 = LdapConfig.loadLdapConfig("testConfig2.properties");
             LdapConfig c2 = LdapConfig.loadLdapConfig("testConfig2.properties");
@@ -225,7 +230,8 @@ public class LdapConfigTest
     {
         try
         {
-            System.setProperty(PropertiesReader.class.getName() + ".dir", "test/config");
+            System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/config");
+            System.setProperty("user.home", "src/test/config");
 
             LdapConfig c1 = LdapConfig.loadLdapConfig("testConfig1.properties");
             LdapConfig c2 = LdapConfig.loadLdapConfig("testConfig2.properties");
@@ -247,7 +253,8 @@ public class LdapConfigTest
     {
         try
         {
-            System.setProperty(PropertiesReader.class.getName() + ".dir", "test/config");
+            System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/config");
+            System.setProperty("user.home", "src/test/config");
 
             LdapConfig ldapConfig = LdapConfig.loadLdapConfig("testConfig.read-only.properties");
 
@@ -269,7 +276,8 @@ public class LdapConfigTest
     {
         try
         {
-            System.setProperty(PropertiesReader.class.getName() + ".dir", "test/config");
+            System.setProperty(PropertiesReader.class.getName() + ".dir", "src/test/config");
+            System.setProperty("user.home", "src/test/config");
 
             LdapConfig ldapConfig = LdapConfig.loadLdapConfig("testConfig.offline.properties");
 
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapConnectionsTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapConnectionsTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapConnectionsTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapConnectionsTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapPersistenceTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapPersistenceTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapPersistenceTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/ldap/LdapPersistenceTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/ModifyPasswordServletTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/ModifyPasswordServletTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/ModifyPasswordServletTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/ModifyPasswordServletTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/ResetPasswordServletTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/ResetPasswordServletTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/ResetPasswordServletTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/ResetPasswordServletTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/UserLoginServletTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/UserLoginServletTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/UserLoginServletTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/UserLoginServletTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/UserRequestServletTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/UserRequestServletTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/UserRequestServletTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/UserRequestServletTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/UserServletTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/UserServletTest.java
similarity index 75%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/UserServletTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/UserServletTest.java
index 0d04f62a..da1815dc 100644
--- a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/UserServletTest.java
+++ b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/UserServletTest.java
@@ -20,8 +20,10 @@ import org.apache.log4j.Logger;
 import org.easymock.EasyMock;
 import org.junit.Test;
 
+import ca.nrc.cadc.ac.server.PluginFactory;
 import ca.nrc.cadc.db.StandaloneContextFactory;
 import ca.nrc.cadc.util.Log4jInit;
+import ca.nrc.cadc.util.PropertiesReader;
 
 
 public class UserServletTest
@@ -73,8 +75,18 @@ public class UserServletTest
     {
         try
         {
+            final PluginFactory piMock = EasyMock.createMock(PluginFactory.class);
+            EasyMock.expect(piMock.createUserPersistence()).andReturn(null).once();
+            StandaloneContextFactory.initJNDI();
+            UserServlet userServlet = new UserServlet(){
+                @Override
+                public PluginFactory getPluginFactory()
+                {
+                    return piMock;
+                }
+            };
+
             StandaloneContextFactory.initJNDI();
-            UserServlet userServlet = new UserServlet();
             ServletConfig config = EasyMock.createMock(ServletConfig.class);
             EasyMock.expect(config.getInitParameter(
                 UserServlet.class.getName() + ".PrivilegedX500Principals")).
@@ -100,8 +112,18 @@ public class UserServletTest
     {
         try
         {
+            final PluginFactory piMock = EasyMock.createMock(PluginFactory.class);
+            EasyMock.expect(piMock.createUserPersistence()).andReturn(null).once();
+            StandaloneContextFactory.initJNDI();
+            UserServlet userServlet = new UserServlet(){
+                @Override
+                public PluginFactory getPluginFactory()
+                {
+                    return piMock;
+                }
+            };
+
             StandaloneContextFactory.initJNDI();
-            UserServlet userServlet = new UserServlet();
             ServletConfig config = EasyMock.createMock(ServletConfig.class);
             EasyMock.expect(config.getInitParameter(
                 UserServlet.class.getName() + ".PrivilegedX500Principals")).
@@ -127,8 +149,16 @@ public class UserServletTest
     {
         try
         {
+            final PluginFactory piMock = EasyMock.createMock(PluginFactory.class);
+            EasyMock.expect(piMock.createUserPersistence()).andReturn(null).once();
             StandaloneContextFactory.initJNDI();
-            UserServlet userServlet = new UserServlet();
+            UserServlet userServlet = new UserServlet(){
+                @Override
+                public PluginFactory getPluginFactory()
+                {
+                    return piMock;
+                }
+            };
             ServletConfig config = EasyMock.createMock(ServletConfig.class);
             EasyMock.expect(config.getInitParameter(
                 UserServlet.class.getName() + ".PrivilegedX500Principals")).
@@ -136,7 +166,7 @@ public class UserServletTest
             EasyMock.expect(config.getInitParameter(
                 UserServlet.class.getName() + ".PrivilegedHttpPrincipals")).
                     andReturn("user1");
-            EasyMock.replay(config);
+            EasyMock.replay(config, piMock);
             userServlet.init(config);
             List<Subject> subjects = userServlet.privilegedSubjects;
             Assert.assertTrue(subjects.size() == 1);
@@ -155,7 +185,16 @@ public class UserServletTest
         try
         {
             StandaloneContextFactory.initJNDI();
-            UserServlet userServlet = new UserServlet();
+            final PluginFactory piMock = EasyMock.createMock(PluginFactory.class);
+            EasyMock.expect(piMock.createUserPersistence()).andReturn(null).once();
+            StandaloneContextFactory.initJNDI();
+            UserServlet userServlet = new UserServlet(){
+                @Override
+                public PluginFactory getPluginFactory()
+                {
+                    return piMock;
+                }
+            };
             ServletConfig config = EasyMock.createMock(ServletConfig.class);
             EasyMock.expect(config.getInitParameter(
                 UserServlet.class.getName() + ".PrivilegedX500Principals")).
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/WhoAmIServletTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/WhoAmIServletTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/WhoAmIServletTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/WhoAmIServletTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/AddGroupMemberActionTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/AddGroupMemberActionTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/AddGroupMemberActionTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/AddGroupMemberActionTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/AddUserMemberActionTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/AddUserMemberActionTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/AddUserMemberActionTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/AddUserMemberActionTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/DeleteGroupActionTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/DeleteGroupActionTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/DeleteGroupActionTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/DeleteGroupActionTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/GetGroupNamesActionTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/GetGroupNamesActionTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/GetGroupNamesActionTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/GetGroupNamesActionTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/GroupActionFactoryTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/GroupActionFactoryTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/GroupActionFactoryTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/GroupActionFactoryTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/RemoveGroupMemberActionTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/RemoveGroupMemberActionTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/RemoveGroupMemberActionTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/RemoveGroupMemberActionTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberActionTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberActionTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberActionTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/groups/RemoveUserMemberActionTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/userrequests/CreateUserRequestActionTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/userrequests/CreateUserRequestActionTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/userrequests/CreateUserRequestActionTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/userrequests/CreateUserRequestActionTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/userrequests/UserRequestActionFactoryTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/userrequests/UserRequestActionFactoryTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/userrequests/UserRequestActionFactoryTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/userrequests/UserRequestActionFactoryTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/CreateUserActionTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/users/CreateUserActionTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/CreateUserActionTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/users/CreateUserActionTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/GetUserActionTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/users/GetUserActionTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/GetUserActionTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/users/GetUserActionTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/GetUserListActionTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/users/GetUserListActionTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/GetUserListActionTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/users/GetUserListActionTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/ModifyUserActionTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/users/ModifyUserActionTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/ModifyUserActionTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/users/ModifyUserActionTest.java
diff --git a/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/UserActionFactoryTest.java b/cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/users/UserActionFactoryTest.java
similarity index 100%
rename from cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/UserActionFactoryTest.java
rename to cadcAccessControl-Server/src/test/java/ca/nrc/cadc/ac/server/web/users/UserActionFactoryTest.java
diff --git a/cadcAccessControl-Server/src/test/resources/LocalAuthority.properties b/cadcAccessControl-Server/src/test/resources/LocalAuthority.properties
new file mode 100644
index 00000000..c9639de9
--- /dev/null
+++ b/cadcAccessControl-Server/src/test/resources/LocalAuthority.properties
@@ -0,0 +1,15 @@
+#
+# local authority map
+#
+# <base standardID> = <authority>
+#ac = canfar.net
+ivo://ivoa.net/std/GMS#groups-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/GMS#search-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/UMS#users-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/UMS#reqs-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/UMS#login-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/UMS#modpass-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/UMS#resetpass-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/UMS#whoami-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/CDP#delegate-1.0 = ivo://example.net/cred
+ivo://ivoa.net/std/CDP#proxy-1.0 = ivo://example.net/cred
diff --git a/cadcAccessControl-Server/test/LdapConfig.test.properties b/cadcAccessControl-Server/test/LdapConfig.test.properties
deleted file mode 100644
index fb4e93e0..00000000
--- a/cadcAccessControl-Server/test/LdapConfig.test.properties
+++ /dev/null
@@ -1,38 +0,0 @@
-# This are the configuration fields required by the Ldap ldap-dao unit tests
-# Tests are more accurate running on Port 636.  If it fails due to SSL/Security
-# issues, then make very sure the ca.crt (gimli2.cadc.dao.nrc.ca:~miscsw/ca.crt)
-# is installed in your Java Keystore:
-# scp gimli2.cadc.dao.nrc.ca:~miscsw/ca.crt /tmp/ca.crt
-# ${JAVA_HOME}/bin/keytool -importcert -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file /tmp/ca.crt
-# Default keystore password is: changeit
-readOnly.servers = proc5-03.cadc.dao.nrc.ca
-readOnly.poolInitSize = 1
-readOnly.poolMaxSize = 1
-readOnly.poolPolicy = roundRobin
-readOnly.maxWait = 30000
-readOnly.createIfNeeded = false
-
-# Read-write connection pool
-readWrite.servers = proc5-03.cadc.dao.nrc.ca
-readWrite.poolInitSize = 1
-readWrite.poolMaxSize = 1
-readWrite.poolPolicy = roundRobin
-readWrite.maxWait = 30000
-readWrite.createIfNeeded = false
-
-# Unbound-Read-write connection pool
-unboundReadOnly.servers = proc5-03.cadc.dao.nrc.ca
-unboundReadOnly.poolInitSize = 1
-unboundReadOnly.poolMaxSize = 1
-unboundReadOnly.poolPolicy = roundRobin
-unboundReadOnly.maxWait = 30000
-unboundReadOnly.createIfNeeded = false
-
-# server configuration -- applies to all servers
-dbrcHost = devLdap
-port = 636
-proxyUser = uid=testproxy,ou=SpecialUsers,dc=testcanfar
-usersDN = ou=Users,ou=ds,dc=testcanfar
-userRequestsDN = ou=UserRequests,ou=ds,dc=testcanfar
-groupsDN = ou=Groups,ou=ds,dc=testcanfar
-adminGroupsDN = ou=adminGroups,ou=ds,dc=testcanfar
\ No newline at end of file
diff --git a/cadcAccessControl/README.md b/cadcAccessControl/README.md
index bc893eb5..5863051a 100644
--- a/cadcAccessControl/README.md
+++ b/cadcAccessControl/README.md
@@ -16,23 +16,3 @@ In the system, a user is uniquely identified by one Principal (e.g. NumericPrinc
 Groups represet associations of users. Groups have an owner, administive members, and actual members.  Members can be groups or users.
 
 ![User Object Model](doc/AccessControl.png)
-
-## Build and Test Dependencies
-
-### opencadc dependencies:
-- opencadc/core/cadcUtil
-- opencadc/reg/cadcRegistry
-
-### external build dependencies
-- json.jar (json.org-20110818.jar)
-- jdom2.jar (jdom-2.0.5.jar)
-- log4j.jar (log4j-1.2.17.jar)
-
-### external test dependencies
-- xerces.jar (xerces-2_9_1)
-- asm.jar (hibernate-3.2.3)
-- cglib.jar (hibernate-3.2.3)
-- easymock.jar (easymock-3.0.jar)
-- junit.jar (junit-4.6.jar)
-- objenesis.jar (objenesis-1.2.jar)
-- jsonassert.jar (jsonassert-1.2.3.jar)
diff --git a/cadcAccessControl/build.xml b/cadcAccessControl/build.xml
deleted file mode 100644
index a356f123..00000000
--- a/cadcAccessControl/build.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<!--
-************************************************************************
-*******************  CANADIAN ASTRONOMY DATA CENTRE  *******************
-**************  CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES  **************
-*
-*  (c) 2009.                            (c) 2009.
-*  Government of Canada                 Gouvernement du Canada
-*  National Research Council            Conseil national de recherches
-*  Ottawa, Canada, K1A 0R6              Ottawa, Canada, K1A 0R6
-*  All rights reserved                  Tous droits réservés
-*
-*  NRC disclaims any warranties,        Le CNRC dénie toute garantie
-*  expressed, implied, or               énoncée, implicite ou légale,
-*  statutory, of any kind with          de quelque nature que ce
-*  respect to the software,             soit, concernant le logiciel,
-*  including without limitation         y compris sans restriction
-*  any warranty of merchantability      toute garantie de valeur
-*  or fitness for a particular          marchande ou de pertinence
-*  purpose. NRC shall not be            pour un usage particulier.
-*  liable in any event for any          Le CNRC ne pourra en aucun cas
-*  damages, whether direct or           être tenu responsable de tout
-*  indirect, special or general,        dommage, direct ou indirect,
-*  consequential or incidental,         particulier ou général,
-*  arising from the use of the          accessoire ou fortuit, résultant
-*  software.  Neither the name          de l'utilisation du logiciel. Ni
-*  of the National Research             le nom du Conseil National de
-*  Council of Canada nor the            Recherches du Canada ni les noms
-*  names of its contributors may        de ses  participants ne peuvent
-*  be used to endorse or promote        être utilisés pour approuver ou
-*  products derived from this           promouvoir les produits dérivés
-*  software without specific prior      de ce logiciel sans autorisation
-*  written permission.                  préalable et particulière
-*                                       par écrit.
-*
-*  This file is part of the             Ce fichier fait partie du projet
-*  OpenCADC project.                    OpenCADC.
-*
-*  OpenCADC is free software:           OpenCADC est un logiciel libre ;
-*  you can redistribute it and/or       vous pouvez le redistribuer ou le
-*  modify it under the terms of         modifier suivant les termes de
-*  the GNU Affero General Public        la “GNU Affero General Public
-*  License as published by the          License” telle que publiée
-*  Free Software Foundation,            par la Free Software Foundation
-*  either version 3 of the              : soit la version 3 de cette
-*  License, or (at your option)         licence, soit (à votre gré)
-*  any later version.                   toute version ultérieure.
-*
-*  OpenCADC is distributed in the       OpenCADC est distribué
-*  hope that it will be useful,         dans l’espoir qu’il vous
-*  but WITHOUT ANY WARRANTY;            sera utile, mais SANS AUCUNE
-*  without even the implied             GARANTIE : sans même la garantie
-*  warranty of MERCHANTABILITY          implicite de COMMERCIALISABILITÉ
-*  or FITNESS FOR A PARTICULAR          ni d’ADÉQUATION À UN OBJECTIF
-*  PURPOSE.  See the GNU Affero         PARTICULIER. Consultez la Licence
-*  General Public License for           Générale Publique GNU Affero
-*  more details.                        pour plus de détails.
-*
-*  You should have received             Vous devriez avoir reçu une
-*  a copy of the GNU Affero             copie de la Licence Générale
-*  General Public License along         Publique GNU Affero avec
-*  with OpenCADC.  If not, see          OpenCADC ; si ce n’est
-*  <http://www.gnu.org/licenses/>.      pas le cas, consultez :
-*                                       <http://www.gnu.org/licenses/>.
-*
-*  $Revision: 4 $
-*
-************************************************************************
--->
-
-<!DOCTYPE project>
-<project default="build" basedir=".">
-    <property environment="env"/>
-    <property file="local.build.properties" />
-
-    <!-- site-specific build properties or overrides of values in opencadc.properties -->
-    <property file="${env.CADC_PREFIX}/etc/local.properties" />
-
-    <!-- site-specific targets, e.g. install, cannot duplicate those in opencadc.targets.xml -->
-    <import file="${env.CADC_PREFIX}/etc/local.targets.xml" optional="true" />
-
-    <!-- default properties and targets -->
-    <property file="${env.CADC_PREFIX}/etc/opencadc.properties" />
-    <import file="${env.CADC_PREFIX}/etc/opencadc.targets.xml"/>
-
-    <!-- developer convenience: place for extra targets and properties -->
-    <import file="extras.xml" optional="true" />
-
-    <property name="project"    value="cadcAccessControl" />
-
-    <property name="cadcUtil"           value="${lib}/cadcUtil.jar" />
-    <property name="cadcRegistryClient" value="${lib}/cadcRegistry.jar" />
-
-    <property name="json"       value="${ext.lib}/json.jar" />
-    <property name="jdom2"      value="${ext.lib}/jdom2.jar" />
-    <property name="log4j"      value="${ext.lib}/log4j.jar" />
-
-    <property name="jars" value="${json}:${jdom2}:${log4j}:${cadcUtil}:${cadcRegistryClient}" />
-    
-    <target name="build" depends="compile">
-        <jar jarfile="${build}/lib/${project}.jar"
-                    basedir="${build}/class"
-                    update="no">
-                <include name="ca/nrc/cadc/**" />
-        </jar>
-    </target>
-
-    <!-- JAR files needed to run the test suite -->
-    <property name="xerces"     value="${ext.lib}/xerces.jar" />
-    <property name="asm"        value="${ext.dev}/asm.jar" />
-    <property name="cglib"      value="${ext.dev}/cglib.jar" />
-    <property name="easymock"   value="${ext.dev}/easymock.jar" />
-    <property name="junit"      value="${ext.dev}/junit.jar" />
-    <property name="objenesis"  value="${ext.dev}/objenesis.jar" />
-    <property name="jsonassert" value="${ext.dev}/jsonassert.jar" />
-    
-    <property name="testingJars" value="${build}/class:${jsonassert}:${jars}:${xerces}:${asm}:${cglib}:${easymock}:${junit}:${objenesis}" />
-	
-	<target name="setup-test">
-        <copy overwrite="true"
-              file="${env.A}/etc/LocalAuthority.properties"
-              tofile="${build}/class/LocalAuthority.properties"/>
-	</target>
-
-    <target name="single-test" depends="compile,compile-test">
-        <echo message="Running test suite..." />
-        <junit printsummary="yes" haltonfailure="yes" fork="yes">
-            <classpath>
-                <pathelement path="${build}/class"/>
-                <pathelement path="${build}/test/class"/>
-                <pathelement path="${testingJars}"/>
-            </classpath>
-            <!--<test name="ca.nrc.cadc.ac.client.GMSClientTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.client.JsonUserListInputStreamWrapperTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.client.UserClientTest" />-->
-
-            <!--<test name="ca.nrc.cadc.ac.GroupPropertyTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.GroupTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.PersonalDetailsTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.PosixDetailsTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.RoleTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.UserRequestTest" />-->
-            <test name="ca.nrc.cadc.ac.UserTest" />
-
-            <!--<test name="ca.nrc.cadc.ac.json.JsonGroupReaderWriterTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.json.JsonUserReaderWriterTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.json.JsonUserListReaderWriterTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.json.JsonUserRequestReaderWriterTest" />-->
-
-            <!--<test name="ca.nrc.cadc.ac.xml.GroupListReaderWriterTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.xml.GroupPropertyReaderWriterTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.xml.GroupReaderWriterTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.xml.IdentityReaderWriterTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.xml.UserDetailsReaderWriterTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.xml.UserListReaderWriterTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.xml.UserReaderWriterTest" />-->
-            <!--<test name="ca.nrc.cadc.ac.xml.UserRequestReaderWriterTest" />-->
-            <formatter type="plain" usefile="false" />
-        </junit>
-    </target>
-
-</project>
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/AC.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/AC.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/AC.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/AC.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/ActivatedGroup.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/ActivatedGroup.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/ActivatedGroup.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/ActivatedGroup.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/Group.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/Group.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/Group.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/Group.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/GroupAlreadyExistsException.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/GroupAlreadyExistsException.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/GroupAlreadyExistsException.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/GroupAlreadyExistsException.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/GroupNotFoundException.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/GroupNotFoundException.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/GroupNotFoundException.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/GroupNotFoundException.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/GroupProperty.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/GroupProperty.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/GroupProperty.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/GroupProperty.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/InternalID.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/InternalID.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/InternalID.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/InternalID.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/MemberAlreadyExistsException.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/MemberAlreadyExistsException.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/MemberAlreadyExistsException.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/MemberAlreadyExistsException.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/MemberNotFoundException.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/MemberNotFoundException.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/MemberNotFoundException.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/MemberNotFoundException.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/PersonalDetails.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/PersonalDetails.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/PersonalDetails.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/PersonalDetails.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/PosixDetails.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/PosixDetails.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/PosixDetails.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/PosixDetails.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/ReaderException.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/ReaderException.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/ReaderException.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/ReaderException.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/Role.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/Role.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/Role.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/Role.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/User.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/User.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/User.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/User.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/UserAlreadyExistsException.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/UserAlreadyExistsException.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/UserAlreadyExistsException.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/UserAlreadyExistsException.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/UserNotFoundException.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/UserNotFoundException.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/UserNotFoundException.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/UserNotFoundException.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/UserRequest.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/UserRequest.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/UserRequest.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/UserRequest.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/UserSet.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/UserSet.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/UserSet.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/UserSet.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/WriterException.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/WriterException.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/WriterException.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/WriterException.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClient.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/client/GMSClient.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClient.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/client/GMSClient.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClientMain.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/client/GMSClientMain.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClientMain.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/client/GMSClientMain.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/client/GroupMemberships.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/client/GroupMemberships.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/client/GroupMemberships.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/client/GroupMemberships.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapper.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapper.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapper.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapper.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/client/UserClient.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/client/UserClient.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/client/UserClient.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/client/UserClient.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonGroupReader.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonGroupReader.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonGroupReader.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonGroupReader.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonGroupWriter.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonGroupWriter.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonGroupWriter.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonGroupWriter.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonUserListReader.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonUserListReader.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonUserListReader.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonUserListReader.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonUserListWriter.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonUserListWriter.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonUserListWriter.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonUserListWriter.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonUserReader.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonUserReader.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonUserReader.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonUserReader.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonUserRequestReader.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonUserRequestReader.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonUserRequestReader.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonUserRequestReader.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonUserRequestWriter.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonUserRequestWriter.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonUserRequestWriter.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonUserRequestWriter.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonUserWriter.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonUserWriter.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/json/JsonUserWriter.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/json/JsonUserWriter.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/xml/AbstractReaderWriter.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/AbstractReaderWriter.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/xml/AbstractReaderWriter.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/AbstractReaderWriter.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/xml/GroupListReader.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/GroupListReader.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/xml/GroupListReader.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/GroupListReader.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/xml/GroupListWriter.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/GroupListWriter.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/xml/GroupListWriter.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/GroupListWriter.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/xml/GroupReader.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/GroupReader.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/xml/GroupReader.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/GroupReader.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/xml/GroupWriter.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/GroupWriter.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/xml/GroupWriter.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/GroupWriter.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/xml/UserListReader.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/UserListReader.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/xml/UserListReader.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/UserListReader.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/xml/UserListWriter.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/UserListWriter.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/xml/UserListWriter.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/UserListWriter.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/xml/UserReader.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/UserReader.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/xml/UserReader.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/UserReader.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/xml/UserRequestReader.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/UserRequestReader.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/xml/UserRequestReader.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/UserRequestReader.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/xml/UserRequestWriter.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/UserRequestWriter.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/xml/UserRequestWriter.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/UserRequestWriter.java
diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/xml/UserWriter.java b/cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/UserWriter.java
similarity index 100%
rename from cadcAccessControl/src/ca/nrc/cadc/ac/xml/UserWriter.java
rename to cadcAccessControl/src/main/java/ca/nrc/cadc/ac/xml/UserWriter.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/GroupPropertyTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/GroupPropertyTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/GroupPropertyTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/GroupPropertyTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/GroupTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/GroupTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/GroupTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/GroupTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/PersonalDetailsTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/PersonalDetailsTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/PersonalDetailsTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/PersonalDetailsTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/PosixDetailsTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/PosixDetailsTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/PosixDetailsTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/PosixDetailsTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/RoleTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/RoleTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/RoleTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/RoleTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/TestUtil.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/TestUtil.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/TestUtil.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/TestUtil.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/UserRequestTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/UserRequestTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/UserRequestTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/UserRequestTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/UserTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/UserTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/UserTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/UserTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/client/GMSClientTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/client/GMSClientTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/client/GMSClientTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/client/GMSClientTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapperTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapperTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapperTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/client/JsonUserListInputStreamWrapperTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/client/UserClientTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/client/UserClientTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/client/UserClientTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/client/UserClientTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/json/JsonGroupReaderWriterTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/json/JsonGroupReaderWriterTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/json/JsonGroupReaderWriterTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/json/JsonGroupReaderWriterTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/json/JsonUserListReaderWriterTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/json/JsonUserListReaderWriterTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/json/JsonUserListReaderWriterTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/json/JsonUserListReaderWriterTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/json/JsonUserReaderWriterTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/json/JsonUserReaderWriterTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/json/JsonUserReaderWriterTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/json/JsonUserReaderWriterTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/json/JsonUserRequestReaderWriterTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/json/JsonUserRequestReaderWriterTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/json/JsonUserRequestReaderWriterTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/json/JsonUserRequestReaderWriterTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/GroupListReaderWriterTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/GroupListReaderWriterTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/GroupListReaderWriterTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/GroupListReaderWriterTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/GroupPropertyReaderWriterTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/GroupPropertyReaderWriterTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/GroupPropertyReaderWriterTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/GroupPropertyReaderWriterTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/GroupReaderWriterTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/GroupReaderWriterTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/GroupReaderWriterTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/GroupReaderWriterTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/IdentityReaderWriterTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/IdentityReaderWriterTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/IdentityReaderWriterTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/IdentityReaderWriterTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/UserDetailsReaderWriterTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/UserDetailsReaderWriterTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/UserDetailsReaderWriterTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/UserDetailsReaderWriterTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/UserListReaderWriterTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/UserListReaderWriterTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/UserListReaderWriterTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/UserListReaderWriterTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/UserReaderWriterTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/UserReaderWriterTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/UserReaderWriterTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/UserReaderWriterTest.java
diff --git a/cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/UserRequestReaderWriterTest.java b/cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/UserRequestReaderWriterTest.java
similarity index 100%
rename from cadcAccessControl/test/src/ca/nrc/cadc/ac/xml/UserRequestReaderWriterTest.java
rename to cadcAccessControl/src/test/java/ca/nrc/cadc/ac/xml/UserRequestReaderWriterTest.java
diff --git a/cadcAccessControl/src/test/resources/LocalAuthority.properties b/cadcAccessControl/src/test/resources/LocalAuthority.properties
new file mode 100644
index 00000000..c9639de9
--- /dev/null
+++ b/cadcAccessControl/src/test/resources/LocalAuthority.properties
@@ -0,0 +1,15 @@
+#
+# local authority map
+#
+# <base standardID> = <authority>
+#ac = canfar.net
+ivo://ivoa.net/std/GMS#groups-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/GMS#search-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/UMS#users-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/UMS#reqs-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/UMS#login-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/UMS#modpass-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/UMS#resetpass-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/UMS#whoami-0.1 = ivo://example.net/gms           
+ivo://ivoa.net/std/CDP#delegate-1.0 = ivo://example.net/cred
+ivo://ivoa.net/std/CDP#proxy-1.0 = ivo://example.net/cred
diff --git a/cadcTomcat/Dependencies.txt b/cadcTomcat/Dependencies.txt
deleted file mode 100644
index 55913f8c..00000000
--- a/cadcTomcat/Dependencies.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-JAR files required for the OpenCADC cadcTomcat project
-======================================================
-
-Name in build.xml          Versioned Name		    Project URL
------------------          --------------       	-----------
-catalina.jar               catalina-7.0.33.jar      http://tomcat.apache.org/
-tomcat-util.jar            tomcat-util-7.0.33.jar   http://tomcat.apache.org/
-tomcat-juli.jar            tomcat-juli-7.0.33.jar   http://tomcat.apache.org/
-tomcat-coyote.jar          tomcat-coyote-7.0.33.jar http://tomcat.apache.org/
-cadcUtil                                            http://code.google.com/p/opencadc/source/checkout
\ No newline at end of file
diff --git a/cadcTomcat/build.gradle b/cadcTomcat/build.gradle
new file mode 100644
index 00000000..d7aca070
--- /dev/null
+++ b/cadcTomcat/build.gradle
@@ -0,0 +1,33 @@
+plugins {
+    id 'java'
+    id 'maven'
+    id 'maven-publish'
+    id 'com.jfrog.bintray' version '1.7.1'
+}
+
+repositories {
+    jcenter()
+    mavenLocal()
+
+    // Only here until cadcUtil is in jcenter.
+    maven {
+        url  'http://dl.bintray.com/opencadc/software'
+    }
+}
+
+sourceCompatibility = 1.7
+group = 'opencadc'
+
+version = '1.0'
+
+dependencies {
+    compile 'log4j:log4j:1.2.+'
+    compile 'org.apache.tomcat:tomcat-catalina:7.0.+'
+    compile 'org.apache.tomcat:tomcat-coyote:7.0.+'
+    compile 'opencadc:cadcUtil:1.+'
+    compile 'opencadc:cadcRegistry:1.+'
+
+    testCompile 'junit:junit:4.+'
+    testCompile 'javax.servlet:javax.servlet-api:3.1.+'
+    testCompile 'commons-logging:commons-logging:1.+'
+}
diff --git a/cadcTomcat/build.xml b/cadcTomcat/build.xml
deleted file mode 100644
index 10ba07f9..00000000
--- a/cadcTomcat/build.xml
+++ /dev/null
@@ -1,144 +0,0 @@
-<!--
-************************************************************************
-*******************  CANADIAN ASTRONOMY DATA CENTRE  *******************
-**************  CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES  **************
-*
-*  (c) 2009.                            (c) 2009.
-*  Government of Canada                 Gouvernement du Canada
-*  National Research Council            Conseil national de recherches
-*  Ottawa, Canada, K1A 0R6              Ottawa, Canada, K1A 0R6
-*  All rights reserved                  Tous droits réservés
-*                                       
-*  NRC disclaims any warranties,        Le CNRC dénie toute garantie
-*  expressed, implied, or               énoncée, implicite ou légale,
-*  statutory, of any kind with          de quelque nature que ce
-*  respect to the software,             soit, concernant le logiciel,
-*  including without limitation         y compris sans restriction
-*  any warranty of merchantability      toute garantie de valeur
-*  or fitness for a particular          marchande ou de pertinence
-*  purpose. NRC shall not be            pour un usage particulier.
-*  liable in any event for any          Le CNRC ne pourra en aucun cas
-*  damages, whether direct or           être tenu responsable de tout
-*  indirect, special or general,        dommage, direct ou indirect,
-*  consequential or incidental,         particulier ou général,
-*  arising from the use of the          accessoire ou fortuit, résultant
-*  software.  Neither the name          de l'utilisation du logiciel. Ni
-*  of the National Research             le nom du Conseil National de
-*  Council of Canada nor the            Recherches du Canada ni les noms
-*  names of its contributors may        de ses  participants ne peuvent
-*  be used to endorse or promote        être utilisés pour approuver ou
-*  products derived from this           promouvoir les produits dérivés
-*  software without specific prior      de ce logiciel sans autorisation
-*  written permission.                  préalable et particulière
-*                                       par écrit.
-*                                       
-*  This file is part of the             Ce fichier fait partie du projet
-*  OpenCADC project.                    OpenCADC.
-*                                       
-*  OpenCADC is free software:           OpenCADC est un logiciel libre ;
-*  you can redistribute it and/or       vous pouvez le redistribuer ou le
-*  modify it under the terms of         modifier suivant les termes de
-*  the GNU Affero General Public        la “GNU Affero General Public
-*  License as published by the          License” telle que publiée
-*  Free Software Foundation,            par la Free Software Foundation
-*  either version 3 of the              : soit la version 3 de cette
-*  License, or (at your option)         licence, soit (à votre gré)
-*  any later version.                   toute version ultérieure.
-*                                       
-*  OpenCADC is distributed in the       OpenCADC est distribué
-*  hope that it will be useful,         dans l’espoir qu’il vous
-*  but WITHOUT ANY WARRANTY;            sera utile, mais SANS AUCUNE
-*  without even the implied             GARANTIE : sans même la garantie
-*  warranty of MERCHANTABILITY          implicite de COMMERCIALISABILITÉ
-*  or FITNESS FOR A PARTICULAR          ni d’ADÉQUATION À UN OBJECTIF
-*  PURPOSE.  See the GNU Affero         PARTICULIER. Consultez la Licence
-*  General Public License for           Générale Publique GNU Affero
-*  more details.                        pour plus de détails.
-*                                       
-*  You should have received             Vous devriez avoir reçu une
-*  a copy of the GNU Affero             copie de la Licence Générale
-*  General Public License along         Publique GNU Affero avec
-*  with OpenCADC.  If not, see          OpenCADC ; si ce n’est
-*  <http://www.gnu.org/licenses/>.      pas le cas, consultez :
-*                                       <http://www.gnu.org/licenses/>.
-*
-*  $Revision: 4 $
-*
-************************************************************************
--->
-
-<project default="build" basedir=".">
-    <property environment="env"/>
-    <property file="local.build.properties" />
-
-    <!-- site-specific build properties or overrides of values in opencadc.properties -->
-    <property file="${env.CADC_PREFIX}/etc/local.properties" />
-
-    <!-- site-specific targets, e.g. install, cannot duplicate those in opencadc.targets.xml -->
-    <import file="${env.CADC_PREFIX}/etc/local.targets.xml" optional="true" />
-
-    <!-- default properties and targets -->
-    <property file="${env.CADC_PREFIX}/etc/opencadc.properties" />
-    <import file="${env.CADC_PREFIX}/etc/opencadc.targets.xml"/>
-
-    <property name="project" value="cadcTomcat" />
-
-    <!-- developer convenience: place for extra targets and properties -->
-    <import file="extras.xml" optional="true" />
-
-    <property name="cadc"               value="${lib}/cadcUtil.jar:${lib}/cadcRegistry.jar" />
-    <property name="log4j"              value="${ext.lib}/log4j.jar" />
-    <property name="tomcat"             value="${ext.lib}/catalina.jar:${ext.lib}/tomcat-util.jar:${ext.lib}/tomcat-coyote.jar" />
-    <property name="jars"               value="${cadc}:${log4j}:${tomcat}" />
-
-    <target name="build" depends="compile">
-        <jar jarfile="${build}/lib/${project}.jar"
-                    basedir="${build}/class"
-                    update="no">
-        </jar>
-    </target>
-
-    
-    <target name="test-resources">
-        <copy todir="${build}/class">
-            <fileset dir="src/resources">
-                <include name="**.properties" />
-            </fileset>
-        </copy>
-        <jar jarfile="${build}/tmp/test.jar"
-                basedir="${build}/class"
-                update="no">
-            <include name="ca/nrc/cadc/reg/client/**" />
-            <include name="**.properties" />
-        </jar>
-    </target>
-
-    <!-- JAR files needed to run the test suite -->
-    <property name="dev.junit" value="${ext.dev}/junit.jar" />
-    <property name="servlet" value="${ext.lib}/servlet-api.jar" />
-    <property name="log" value="${ext.lib}/commons-logging.jar" />
-    <property name="juli" value="${ext.lib}/tomcat-juli.jar" />
-    <property name="tomcatUtil" value="${ext.lib}/tomcat-util.jar" />
-    <property name="test" value="${build}/tmp/test.jar" />
-    <property name="testingJars" value="${dev.junit}:${servlet}:${log}:${juli}:${tomcatUtil}:${test}" />
-    
-    <!-- Run the test suite -->
-    <target name="test" depends="compile-test,test-resources">
-        <echo message="Running test" />
-
-        <!-- Run the junit test suite -->
-        <echo message="Running test suite..." />
-        <junit printsummary="yes" haltonfailure="yes" fork="yes">
-            <classpath>
-                <pathelement path="${build}/test/class" />
-                <pathelement path="${build}/class" />
-                <pathelement path="${jars}:${testingJars}" />
-            </classpath>
-
-            <test name="ca.nrc.cadc.tomcat.CadcBasicAuthenticatorTest"/>
-            <test name="ca.nrc.cadc.tomcat.AuthenticationLookupTest"/>
-            <formatter type="plain" usefile="false"/>
-        </junit>
-    </target>
-    
-</project>
diff --git a/cadcTomcat/src/ca/nrc/cadc/tomcat/AuthenticationLookup.java b/cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/AuthenticationLookup.java
similarity index 100%
rename from cadcTomcat/src/ca/nrc/cadc/tomcat/AuthenticationLookup.java
rename to cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/AuthenticationLookup.java
diff --git a/cadcTomcat/src/ca/nrc/cadc/tomcat/CadcBasicAuthenticator.java b/cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/CadcBasicAuthenticator.java
similarity index 100%
rename from cadcTomcat/src/ca/nrc/cadc/tomcat/CadcBasicAuthenticator.java
rename to cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/CadcBasicAuthenticator.java
diff --git a/cadcTomcat/src/ca/nrc/cadc/tomcat/CadcSSLImplementation.java b/cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/CadcSSLImplementation.java
similarity index 100%
rename from cadcTomcat/src/ca/nrc/cadc/tomcat/CadcSSLImplementation.java
rename to cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/CadcSSLImplementation.java
diff --git a/cadcTomcat/src/ca/nrc/cadc/tomcat/CadcSSLSocketFactory.java b/cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/CadcSSLSocketFactory.java
similarity index 100%
rename from cadcTomcat/src/ca/nrc/cadc/tomcat/CadcSSLSocketFactory.java
rename to cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/CadcSSLSocketFactory.java
diff --git a/cadcTomcat/src/ca/nrc/cadc/tomcat/CadcX509TrustManager.java b/cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/CadcX509TrustManager.java
similarity index 100%
rename from cadcTomcat/src/ca/nrc/cadc/tomcat/CadcX509TrustManager.java
rename to cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/CadcX509TrustManager.java
diff --git a/cadcTomcat/src/ca/nrc/cadc/tomcat/RealmMultiValuedProperties.java b/cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/RealmMultiValuedProperties.java
similarity index 100%
rename from cadcTomcat/src/ca/nrc/cadc/tomcat/RealmMultiValuedProperties.java
rename to cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/RealmMultiValuedProperties.java
diff --git a/cadcTomcat/src/ca/nrc/cadc/tomcat/RealmUtil.java b/cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/RealmUtil.java
similarity index 100%
rename from cadcTomcat/src/ca/nrc/cadc/tomcat/RealmUtil.java
rename to cadcTomcat/src/main/java/ca/nrc/cadc/tomcat/RealmUtil.java
diff --git a/cadcTomcat/src/resources/RegistryClient.properties b/cadcTomcat/src/main/resources/RegistryClient.properties
similarity index 100%
rename from cadcTomcat/src/resources/RegistryClient.properties
rename to cadcTomcat/src/main/resources/RegistryClient.properties
diff --git a/cadcTomcat/test/config/RegistryClient.properties b/cadcTomcat/src/test/config/RegistryClient.properties
similarity index 100%
rename from cadcTomcat/test/config/RegistryClient.properties
rename to cadcTomcat/src/test/config/RegistryClient.properties
diff --git a/cadcTomcat/test/src/ca/nrc/cadc/tomcat/AuthenticationLookupTest.java b/cadcTomcat/src/test/java/ca/nrc/cadc/tomcat/AuthenticationLookupTest.java
similarity index 100%
rename from cadcTomcat/test/src/ca/nrc/cadc/tomcat/AuthenticationLookupTest.java
rename to cadcTomcat/src/test/java/ca/nrc/cadc/tomcat/AuthenticationLookupTest.java
diff --git a/cadcTomcat/test/src/ca/nrc/cadc/tomcat/CadcBasicAuthenticatorTest.java b/cadcTomcat/src/test/java/ca/nrc/cadc/tomcat/CadcBasicAuthenticatorTest.java
similarity index 100%
rename from cadcTomcat/test/src/ca/nrc/cadc/tomcat/CadcBasicAuthenticatorTest.java
rename to cadcTomcat/src/test/java/ca/nrc/cadc/tomcat/CadcBasicAuthenticatorTest.java
-- 
GitLab