You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ni...@apache.org on 2026/03/07 15:28:02 UTC

(ignite) 01/03: WIP

This is an automated email from the ASF dual-hosted git repository.

nizhikov pushed a commit to branch remove_deployment_spi
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit 493909e1aed77133a3747ed0d2d5d7a297650f22
Author: Nikolay Izhikov <ni...@apache.org>
AuthorDate: Sat Mar 7 18:10:21 2026 +0300

    WIP
---
 docs/_docs/code-snippets/java/pom.xml              |    5 -
 modules/bom/pom.xml                                |    5 -
 .../org/apache/ignite/IgniteSystemProperties.java  |   12 -
 .../org/apache/ignite/internal/IgnitionEx.java     |   25 -
 modules/spring/pom.xml                             |    6 -
 .../p2p/GridP2PUserVersionChangeSelfTest.java      |  377 ------
 .../ignite/testsuites/IgniteSpringTestSuite.java   |    2 -
 modules/urideploy/README.txt                       |   33 -
 modules/urideploy/licenses/apache-2.0.txt          |  202 ---
 modules/urideploy/pom.xml                          |  164 ---
 .../uri/GridUriDeploymentClassLoader.java          |  185 ---
 .../uri/GridUriDeploymentClassLoaderFactory.java   |   95 --
 .../deployment/uri/GridUriDeploymentDiscovery.java |  121 --
 .../uri/GridUriDeploymentFileProcessor.java        |  458 -------
 .../uri/GridUriDeploymentFileProcessorResult.java  |  113 --
 .../uri/GridUriDeploymentFileResourceLoader.java   |   86 --
 .../uri/GridUriDeploymentJarVerifier.java          |  399 ------
 .../uri/GridUriDeploymentSpringDocument.java       |  100 --
 .../uri/GridUriDeploymentSpringParser.java         |   79 --
 .../uri/GridUriDeploymentUnitDescriptor.java       |  279 ----
 .../deployment/uri/GridUriDeploymentUriParser.java |  180 ---
 .../spi/deployment/uri/UriDeploymentSpi.java       | 1408 --------------------
 .../spi/deployment/uri/UriDeploymentSpiMBean.java  |   52 -
 .../ignite/spi/deployment/uri/package-info.java    |   23 -
 .../uri/scanners/GridDeploymentFileHandler.java    |   32 -
 .../GridDeploymentFolderScannerHelper.java         |   55 -
 .../scanners/GridUriDeploymentScannerListener.java |   54 -
 .../uri/scanners/UriDeploymentScanner.java         |   47 -
 .../uri/scanners/UriDeploymentScannerContext.java  |   92 --
 .../uri/scanners/UriDeploymentScannerManager.java  |  226 ----
 .../scanners/file/UriDeploymentFileScanner.java    |  337 -----
 .../deployment/uri/scanners/file/package-info.java |   23 -
 .../scanners/http/UriDeploymentHttpScanner.java    |  507 -------
 .../deployment/uri/scanners/http/package-info.java |   23 -
 .../spi/deployment/uri/scanners/package-info.java  |   23 -
 .../GridTaskUriDeploymentDeadlockSelfTest.java     |  105 --
 .../UriDeploymentAbsentProcessorClassTest.java     |  117 --
 .../apache/ignite/p2p/GridP2PDisabledSelfTest.java |  218 ---
 .../uri/GridUriDeploymentAbstractSelfTest.java     |  106 --
 ...DeploymentClassLoaderMultiThreadedSelfTest.java |   75 --
 .../uri/GridUriDeploymentClassLoaderSelfTest.java  |   79 --
 ...idUriDeploymentClassloaderRegisterSelfTest.java |  159 ---
 .../uri/GridUriDeploymentConfigSelfTest.java       |   76 --
 .../GridUriDeploymentFileProcessorSelfTest.java    |  167 ---
 .../uri/GridUriDeploymentMd5CheckSelfTest.java     |  209 ---
 ...DeploymentMultiScannersErrorThrottlingTest.java |   54 -
 .../GridUriDeploymentMultiScannersSelfTest.java    |   57 -
 .../uri/GridUriDeploymentSimpleSelfTest.java       |  197 ---
 .../spi/deployment/uri/META-INF/ignite.brokenxml   |   18 -
 .../spi/deployment/uri/META-INF/ignite.empty       |    0
 .../spi/deployment/uri/META-INF/ignite.incorrefs   |   18 -
 .../ignite/spi/deployment/uri/META-INF/ignite.xml  |   38 -
 .../ignite/spi/deployment/uri/package-info.java    |   23 -
 .../scanners/file/GridFileDeploymentSelfTest.java  |  206 ---
 .../file/GridFileDeploymentUndeploySelfTest.java   |  113 --
 .../deployment/uri/scanners/file/package-info.java |   23 -
 .../scanners/http/GridHttpDeploymentSelfTest.java  |  239 ----
 .../deployment/uri/scanners/http/package-info.java |   23 -
 .../testsuites/IgniteToolsSelfTestSuite.java       |   32 -
 .../testsuites/IgniteUriDeploymentTestSuite.java   |   71 -
 .../org/apache/ignite/tools/GridToolsSelfTest.java |  395 ------
 .../ignite/tools/gartask/META-INF/ignite.xml       |   38 -
 .../java/org/apache/ignite/tools/package-info.java |   23 -
 pom.xml                                            |    1 -
 64 files changed, 8708 deletions(-)

diff --git a/docs/_docs/code-snippets/java/pom.xml b/docs/_docs/code-snippets/java/pom.xml
index 66b95b08781..77a2e41d3c0 100644
--- a/docs/_docs/code-snippets/java/pom.xml
+++ b/docs/_docs/code-snippets/java/pom.xml
@@ -57,11 +57,6 @@
             <artifactId>ignite-spring</artifactId>
             <version>${ignite.version}</version>
         </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>ignite-urideploy</artifactId>
-            <version>${ignite.version}</version>
-        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>ignite-zookeeper</artifactId>
diff --git a/modules/bom/pom.xml b/modules/bom/pom.xml
index 25f8124d03f..08b2ad73a92 100644
--- a/modules/bom/pom.xml
+++ b/modules/bom/pom.xml
@@ -146,11 +146,6 @@
                 <artifactId>ignite-tools</artifactId>
                 <version>${revision}</version>
             </dependency>
-            <dependency>
-                <groupId>${project.groupId}</groupId>
-                <artifactId>ignite-urideploy</artifactId>
-                <version>${revision}</version>
-            </dependency>
             <dependency>
                 <groupId>${project.groupId}</groupId>
                 <artifactId>ignite-yardstick</artifactId>
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
index bbb9d385370..ed01c9662bd 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
@@ -29,7 +29,6 @@ import org.apache.ignite.cluster.ClusterGroup;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.CheckpointWriteOrder;
 import org.apache.ignite.configuration.DataStorageConfiguration;
-import org.apache.ignite.configuration.DeploymentMode;
 import org.apache.ignite.configuration.DiskPageCompression;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.cache.query.index.sorted.inline.InlineRecommender;
@@ -369,17 +368,6 @@ public final class IgniteSystemProperties extends IgniteCommonsSystemProperties
         "overrides the settings set via IgniteConfiguration", type = String.class)
     public static final String IGNITE_LOCAL_HOST = "IGNITE_LOCAL_HOST";
 
-    /**
-     * System property to override deployment mode configuration parameter.
-     * Valid values for property are: PRIVATE, ISOLATED, SHARED or CONTINUOUS.
-     *
-     * @see org.apache.ignite.configuration.DeploymentMode
-     * @see org.apache.ignite.configuration.IgniteConfiguration#getDeploymentMode()
-     */
-    @SystemProperty(value = "Sets deployment mode configuration parameter. Valid " +
-        "values for property are: PRIVATE, ISOLATED, SHARED or CONTINUOUS", type = DeploymentMode.class)
-    public static final String IGNITE_DEP_MODE_OVERRIDE = "IGNITE_DEPLOYMENT_MODE_OVERRIDE";
-
     /**
      * Property controlling size of buffer holding completed transaction versions. Such buffer
      * is used to detect duplicate transaction and has a default value of {@code 102400}. In
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
index 7f4529a6a19..b77187f2d76 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
@@ -62,7 +62,6 @@ import org.apache.ignite.compute.ComputeJob;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.ConnectorConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
-import org.apache.ignite.configuration.DeploymentMode;
 import org.apache.ignite.configuration.ExecutorConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.TransactionConfiguration;
@@ -128,7 +127,6 @@ import static org.apache.ignite.IgniteState.STOPPED_ON_FAILURE;
 import static org.apache.ignite.IgniteState.STOPPED_ON_SEGMENTATION;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_CACHE_CLIENT;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_CONFIG_URL;
-import static org.apache.ignite.IgniteSystemProperties.IGNITE_DEP_MODE_OVERRIDE;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_LOCAL_HOST;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_NO_SHUTDOWN_HOOK;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_OVERRIDE_CONSISTENT_ID;
@@ -1879,29 +1877,6 @@ public class IgnitionEx {
                     myCfg.setClientMode(threadClient);
             }
 
-            // Check for deployment mode override.
-            String depModeName = IgniteSystemProperties.getString(IGNITE_DEP_MODE_OVERRIDE);
-
-            if (!F.isEmpty(depModeName)) {
-                if (!F.isEmpty(myCfg.getCacheConfiguration())) {
-                    U.quietAndInfo(log, "Skipping deployment mode override for caches (custom closure " +
-                        "execution may not work for console Visor)");
-                }
-                else {
-                    try {
-                        DeploymentMode depMode = DeploymentMode.valueOf(depModeName);
-
-                        if (myCfg.getDeploymentMode() != depMode)
-                            myCfg.setDeploymentMode(depMode);
-                    }
-                    catch (IllegalArgumentException e) {
-                        throw new IgniteCheckedException("Failed to override deployment mode using system property " +
-                            "(are there any misspellings?)" +
-                            "[name=" + IGNITE_DEP_MODE_OVERRIDE + ", value=" + depModeName + ']', e);
-                    }
-                }
-            }
-
             if (myCfg.getUserAttributes() == null)
                 myCfg.setUserAttributes(Collections.emptyMap());
 
diff --git a/modules/spring/pom.xml b/modules/spring/pom.xml
index a8c11444928..f1c164d1e5c 100644
--- a/modules/spring/pom.xml
+++ b/modules/spring/pom.xml
@@ -52,12 +52,6 @@
             <version>1.1.1</version>
         </dependency>
 
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>ignite-urideploy</artifactId>
-            <scope>test</scope>
-        </dependency>
-
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>ignite-log4j2</artifactId>
diff --git a/modules/spring/src/test/java/org/apache/ignite/p2p/GridP2PUserVersionChangeSelfTest.java b/modules/spring/src/test/java/org/apache/ignite/p2p/GridP2PUserVersionChangeSelfTest.java
deleted file mode 100644
index 2b09ee17e42..00000000000
--- a/modules/spring/src/test/java/org/apache/ignite/p2p/GridP2PUserVersionChangeSelfTest.java
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.p2p;
-
-import java.net.URL;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-import javax.cache.Cache;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.DeploymentMode;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.events.DeploymentEvent;
-import org.apache.ignite.events.Event;
-import org.apache.ignite.events.EventType;
-import org.apache.ignite.internal.util.typedef.PAX;
-import org.apache.ignite.lang.IgnitePredicate;
-import org.apache.ignite.testframework.GridTestExternalClassLoader;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
-import static org.apache.ignite.events.EventType.EVT_NODE_LEFT;
-import static org.apache.ignite.events.EventType.EVT_TASK_UNDEPLOYED;
-
-/**
- * The test does the following:
- *
- * 1. The test should execute a task in SHARED_DEPLOY mode, restart a node with new version and make sure that a
- *      new class loader is created on remote node.
- * 2. The test should execute a task in SHARED_DEPLOY mode, restart a node with same version and make sure
- *      that the same class loader is created on remote node.
- * 3. The test should execute a task in SHARED_UNDEPLOY mode, restart a node with same version and
- *      make sure that a new class loader is created on remote node.
- */
-@SuppressWarnings({"ProhibitedExceptionDeclared", "unchecked"})
-public class GridP2PUserVersionChangeSelfTest extends GridCommonAbstractTest {
-    /** Current deployment mode. */
-    private DeploymentMode depMode;
-
-    /** Test task class name. */
-    private static final String TEST_TASK_NAME = "org.apache.ignite.tests.p2p.P2PTestTaskExternalPath1";
-
-    /** Test resource class name. */
-    private static final String TEST_RCRS_NAME = "org.apache.ignite.tests.p2p.TestUserResource";
-
-    /** */
-    public GridP2PUserVersionChangeSelfTest() {
-        super(/*start grid*/false);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected long getTestTimeout() {
-        return 30 * 1000;
-    }
-
-    /**
-     * @return Timeout for condition waits.
-     */
-    private long getConditionTimeout() {
-        return getTestTimeout() > 10000 ? getTestTimeout() - 10000 : getTestTimeout();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        cfg.setDeploymentMode(depMode);
-        cfg.setNetworkTimeout(10000);
-
-        if (igniteInstanceName.contains("testCacheRedeployVersionChangeContinuousMode")) {
-            CacheConfiguration cacheCfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
-
-            cacheCfg.setCacheMode(CacheMode.REPLICATED);
-
-            cfg.setCacheConfiguration(cacheCfg);
-        }
-        else
-            cfg.setCacheConfiguration();
-
-        cfg.setIncludeEventTypes(EventType.EVTS_ALL);
-
-        return cfg;
-    }
-
-    /**
-     * @throws Exception If test failed.
-     */
-    @Test
-    public void testRedeployVersionChangeContinuousMode() throws Exception {
-        depMode = DeploymentMode.CONTINUOUS;
-
-        checkRedeployVersionChange();
-    }
-
-    /**
-     * @throws Exception If test failed.
-     */
-    @Test
-    public void testRedeployVersionChangeSharedMode() throws Exception {
-        depMode = DeploymentMode.SHARED;
-
-        checkRedeployVersionChange();
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    private void checkRedeployVersionChange() throws Exception {
-        try {
-            Ignite ignite1 = startGrid(1);
-            Ignite ignite2 = startGrid(2);
-
-            GridTestExternalClassLoader ldr = new GridTestExternalClassLoader(
-                new URL[] { new URL(GridTestProperties.getProperty("p2p.uri.cls")) },
-                Collections.singletonMap("META-INF/ignite.xml", makeUserVersion("1").getBytes()));
-
-            Class task1 = ldr.loadClass(TEST_TASK_NAME);
-
-            final CountDownLatch undeployed = new CountDownLatch(1);
-
-            ignite2.events().localListen(new IgnitePredicate<Event>() {
-                @Override public boolean apply(Event evt) {
-                    if (evt.type() == EVT_TASK_UNDEPLOYED &&
-                        ((DeploymentEvent)evt).alias().equals(TEST_TASK_NAME))
-                        undeployed.countDown();
-
-                    return true;
-                }
-            }, EVT_TASK_UNDEPLOYED);
-
-            Integer res1 = (Integer)ignite1.compute().execute(task1, ignite2.cluster().localNode().id());
-
-            stopGrid(1);
-
-            ldr.setResourceMap(Collections.singletonMap("META-INF/ignite.xml", makeUserVersion("2").getBytes()));
-
-            ignite1 = startGrid(1);
-
-            Integer res2 = (Integer)ignite1.compute().execute(task1, ignite2.cluster().localNode().id());
-
-            assert !res1.equals(res2);
-
-            // Allow P2P timeout to expire.
-            assert undeployed.await(30000, MILLISECONDS);
-        }
-        finally {
-            stopGrid(1);
-            stopGrid(2);
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testRedeployOnNodeRestartContinuousMode() throws Exception {
-        depMode = DeploymentMode.CONTINUOUS;
-
-        try {
-            Ignite ignite1 = startGrid(1);
-            Ignite ignite2 = startGrid(2);
-
-            GridTestExternalClassLoader ldr = new GridTestExternalClassLoader(
-                new URL[] { new URL(GridTestProperties.getProperty("p2p.uri.cls")) });
-
-            Class task1 = ldr.loadClass(TEST_TASK_NAME);
-
-            final CountDownLatch undeployed = new CountDownLatch(1);
-
-            ignite2.events().localListen(new IgnitePredicate<Event>() {
-                @Override public boolean apply(Event evt) {
-                    if (evt.type() == EVT_TASK_UNDEPLOYED &&
-                        ((DeploymentEvent)evt).alias().equals(TEST_TASK_NAME))
-                        undeployed.countDown();
-
-                    return true;
-                }
-            }, EVT_TASK_UNDEPLOYED);
-
-            Integer res1 = (Integer)ignite1.compute().execute(task1, ignite2.cluster().localNode().id());
-
-            stopGrid(1);
-
-            ignite1 = startGrid(1);
-
-            Integer res2 = (Integer)ignite1.compute().execute(task1, ignite2.cluster().localNode().id());
-
-            assert !undeployed.await(3000, MILLISECONDS);
-
-            assert res1.equals(res2);
-        }
-        finally {
-            stopGrid(1);
-            stopGrid(2);
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testRedeployOnNodeRestartSharedMode() throws Exception {
-        depMode = DeploymentMode.SHARED;
-
-        try {
-            Ignite ignite1 = startGrid(1);
-            Ignite ignite2 = startGrid(2);
-
-            GridTestExternalClassLoader ldr = new GridTestExternalClassLoader(
-                new URL[] { new URL(GridTestProperties.getProperty("p2p.uri.cls")) });
-
-            Class task1 = ldr.loadClass(TEST_TASK_NAME);
-
-            final CountDownLatch undeployed = new CountDownLatch(1);
-
-            ignite2.events().localListen(new IgnitePredicate<Event>() {
-                @Override public boolean apply(Event evt) {
-                    if (evt.type() == EVT_TASK_UNDEPLOYED &&
-                        ((DeploymentEvent)evt).alias().equals(TEST_TASK_NAME))
-                        undeployed.countDown();
-
-                    return true;
-                }
-            }, EVT_TASK_UNDEPLOYED);
-
-            final CountDownLatch discoLatch = new CountDownLatch(1);
-
-            ignite2.events().localListen(new IgnitePredicate<Event>() {
-                @Override public boolean apply(Event evt) {
-                    if (evt.type() == EVT_NODE_LEFT || evt.type() == EVT_NODE_FAILED)
-                        discoLatch.countDown();
-
-                    return true;
-                }
-            }, EVT_NODE_LEFT, EVT_NODE_FAILED);
-
-            Integer res1 = (Integer)ignite1.compute().execute(task1, ignite2.cluster().localNode().id());
-
-            stopGrid(1);
-
-            assert discoLatch.await(1000, MILLISECONDS);
-
-            assert undeployed.await(1000, MILLISECONDS);
-
-            ignite1 = startGrid(1);
-
-            Integer res2 = (Integer)ignite1.compute().execute(task1, ignite2.cluster().localNode().id());
-
-            assert !res1.equals(res2);
-        }
-        finally {
-            stopGrid(1);
-            stopGrid(2);
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-604")
-    @Test
-    public void testCacheRedeployVersionChangeContinuousMode() throws Exception {
-        depMode = DeploymentMode.CONTINUOUS;
-
-        try {
-            Ignite ignite1 = startGrid("testCacheRedeployVersionChangeContinuousMode1");
-            Ignite ignite2 = startGrid("testCacheRedeployVersionChangeContinuousMode2");
-
-            GridTestExternalClassLoader ldr = new GridTestExternalClassLoader(
-                new URL[] { new URL(GridTestProperties.getProperty("p2p.uri.cls")) },
-                Collections.singletonMap("META-INF/ignite.xml", makeUserVersion("1").getBytes()));
-
-            Class rcrsCls = ldr.loadClass(TEST_RCRS_NAME);
-
-            IgniteCache<Long, Object> cache1 = ignite1.cache(DEFAULT_CACHE_NAME);
-
-            assertNotNull(cache1);
-
-            cache1.put(1L, rcrsCls.newInstance());
-
-            final IgniteCache<Long, Object> cache2 = ignite2.cache(DEFAULT_CACHE_NAME);
-
-            assertNotNull(cache2);
-
-            // The entry should propagate to grid2, because the
-            // cache is REPLICATED. This happens asynchronously, we
-            // need to use condition wait.
-            assert GridTestUtils.waitForCondition(new PAX() {
-                @Override public boolean applyx() {
-                    return cache2.get(1L) != null;
-                }
-            }, getConditionTimeout());
-
-            stopGrid("testCacheRedeployVersionChangeContinuousMode1");
-
-            // Increase the user version of the test class.
-            ldr.setResourceMap(Collections.singletonMap("META-INF/ignite.xml", makeUserVersion("2").getBytes()));
-
-            ignite1 = startGrid("testCacheRedeployVersionChangeContinuousMode1");
-
-            cache1 = ignite1.cache(DEFAULT_CACHE_NAME);
-
-            assertNotNull(cache1);
-
-            // Put an entry with a new user version.
-            cache1.put(2L, rcrsCls.newInstance());
-
-            // At this point, old version of test resource should be undeployed
-            // and removed from cache asynchronously.
-            assert GridTestUtils.waitForCondition(new PAX() {
-                @Override public boolean applyx() {
-                    return cache2.get(1L) == null;
-                }
-            }, getConditionTimeout()) : "2nd condition failed [entries1=" + toSet(cache1.iterator()) +
-                ", entries2=" + toSet(cache2.iterator()) + ']';
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-
-    /**
-     *
-     */
-    private <K, V> Set<Cache.Entry<K, V>> toSet(Iterator<Cache.Entry<K, V>> iter) {
-        Set<Cache.Entry<K, V>> set = new HashSet<>();
-
-        while (iter.hasNext())
-            set.add(iter.next());
-
-        return set;
-    }
-
-    /**
-     * Creates content of META-INF/ignite.xml for specified user version.
-     *
-     * @param userVer Version to create.
-     * @return content of META-INF/ignite.xml.
-     */
-    private String makeUserVersion(String userVer) {
-        return "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " +
-            "<beans xmlns=\"http://www.springframework.org/schema/beans\" " +
-            "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
-            "xmlns:util=\"http://www.springframework.org/schema/util\" " +
-            "xsi:schemaLocation=\"http://www.springframework.org/schema/beans " +
-            "http://www.springframework.org/schema/beans/spring-beans.xsd " +
-            "http://www.springframework.org/schema/util " +
-            "http://www.springframework.org/schema/util/spring-util.xsd\"> " +
-            "<bean id=\"userVersion\" class=\"java.lang.String\"><constructor-arg value=\"" + userVer + "\"/></bean> " +
-            "</beans>";
-    }
-}
diff --git a/modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java b/modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java
index c012cc43542..050cdde2d5b 100644
--- a/modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java
+++ b/modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java
@@ -35,7 +35,6 @@ import org.apache.ignite.internal.SqlPlanHistoryConfigTest;
 import org.apache.ignite.internal.metric.RegexpMetricFilterTest;
 import org.apache.ignite.internal.processors.cache.distributed.dht.GridCacheDhtMultiBackupTest;
 import org.apache.ignite.internal.processors.resource.GridTransformSpringInjectionSelfTest;
-import org.apache.ignite.p2p.GridP2PUserVersionChangeSelfTest;
 import org.apache.ignite.spring.IgniteExcludeInConfigurationTest;
 import org.apache.ignite.spring.IgniteStartFromStreamConfigurationTest;
 import org.apache.ignite.spring.injection.GridServiceInjectionSpringResourceTest;
@@ -59,7 +58,6 @@ import org.junit.runners.Suite;
     IgniteExcludeInConfigurationTest.class,
 
     // Tests moved to this suite since they require Spring functionality.
-    GridP2PUserVersionChangeSelfTest.class,
 
     IgniteDynamicCacheConfigTest.class,
 
diff --git a/modules/urideploy/README.txt b/modules/urideploy/README.txt
deleted file mode 100644
index dc3defdf7fb..00000000000
--- a/modules/urideploy/README.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-Apache Ignite URI Deploy Module
--------------------------------
-
-Apache Ignite URI Deploy module provides capabilities to deploy tasks from different sources like
-File System, HTTP, or even Email.
-
-To enable URI Deploy module when starting a standalone node, move 'optional/ignite-urideploy' folder to
-'libs' folder before running 'ignite.{sh|bat}' script. The content of the module folder will
-be added to classpath in this case.
-
-Importing URI Deploy Module In Maven Project
---------------------------------------------
-
-If you are using Maven to manage dependencies of your project, you can add URI Deploy module
-dependency like this (replace '${ignite.version}' with actual Ignite version you are
-interested in):
-
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
-                        http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    ...
-    <dependencies>
-        ...
-        <dependency>
-            <groupId>org.apache.ignite</groupId>
-            <artifactId>ignite-urideploy</artifactId>
-            <version>${ignite.version}</version>
-        </dependency>
-        ...
-    </dependencies>
-    ...
-</project>
diff --git a/modules/urideploy/licenses/apache-2.0.txt b/modules/urideploy/licenses/apache-2.0.txt
deleted file mode 100644
index d6456956733..00000000000
--- a/modules/urideploy/licenses/apache-2.0.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/modules/urideploy/pom.xml b/modules/urideploy/pom.xml
deleted file mode 100644
index 8927c9d5b4b..00000000000
--- a/modules/urideploy/pom.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-
-<!--
-    POM file.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.ignite</groupId>
-        <artifactId>ignite-parent-internal</artifactId>
-        <version>${revision}</version>
-        <relativePath>../../parent-internal/pom.xml</relativePath>
-    </parent>
-
-    <artifactId>ignite-urideploy</artifactId>
-
-    <url>http://ignite.apache.org</url>
-
-    <dependencies>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>ignite-core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-aop</artifactId>
-            <version>${spring.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-beans</artifactId>
-            <version>${spring.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <version>${spring.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>${spring.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-expression</artifactId>
-            <version>${spring.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-tx</artifactId>
-            <version>${spring.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.github.jtidy</groupId>
-            <artifactId>jtidy</artifactId>
-            <version>${jtidy.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-codec</groupId>
-            <artifactId>commons-codec</artifactId>
-            <version>${commons.codec.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.tomcat</groupId>
-            <artifactId>tomcat-servlet-api</artifactId>
-            <version>${tomcat.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>ignite-core</artifactId>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>ignite-tools</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-io</artifactId>
-            <version>${jetty.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-http</artifactId>
-            <version>${jetty.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-server</artifactId>
-            <version>${jetty.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-util</artifactId>
-            <version>${jetty.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-deploy-plugin</artifactId>
-                <version>2.8.2</version>
-                <configuration>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassLoader.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassLoader.java
deleted file mode 100644
index 075f1d64dec..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassLoader.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.Arrays;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Loads classes and resources from "unpacked" deployment archives.
- * <p>
- * Class loader scans package directory first and then if
- * class/resource was not found scans all JAR files.
- */
-class GridUriDeploymentClassLoader extends URLClassLoader {
-    /**
-     * Creates new instance of class loader.
-     *
-     * @param urls The URLs from which to load classes and resources.
-     * @param parent The parent class loader for delegation.
-     */
-    GridUriDeploymentClassLoader(URL[] urls, ClassLoader parent) {
-        super(urls, parent);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
-        // First, check if the class has already been loaded.
-        Class cls = findLoadedClass(name);
-
-        if (cls == null) {
-            try {
-                try {
-                    // Search classes in a deployment unit.
-                    // NOTE: findClass(String) is not overridden since it is always called after
-                    // findLoadedClass(String) in exclusive synchronization block.
-                    cls = findClass(name);
-                }
-                catch (ClassNotFoundException ignored) {
-                    // If still not found, then invoke parent class loader in order
-                    // to find the class.
-                    cls = super.loadClass(name, resolve);
-                }
-            }
-            catch (ClassNotFoundException e) {
-                throw e;
-            }
-            // Catch Throwable to secure against any errors resulted from
-            // corrupted class definitions or other user errors.
-            catch (Exception e) {
-                throw new ClassNotFoundException("Failed to load class due to unexpected error: " + name, e);
-            }
-        }
-
-        return cls;
-    }
-
-    /**
-     * Load class from a deployment unit.
-     *
-     * @param name Class name.
-     * @return Loaded class.
-     * @throws ClassNotFoundException If no class found.
-     */
-    public synchronized Class<?> loadClassIsolated(String name) throws ClassNotFoundException {
-        // First, check if the class has already been loaded.
-        Class<?> cls = findLoadedClass(name);
-
-        if (cls == null) {
-            try {
-                // Search classes in deployment unit.
-                // NOTE: findClass(String) is not overridden since it is always called after
-                // findLoadedClass(String) in exclusive synchronization block.
-                cls = findClass(name);
-            }
-            catch (ClassNotFoundException e) {
-                throw e;
-            }
-            // Catch Throwable to secure against any errors resulted from
-            // corrupted class definitions or other user errors.
-            catch (Exception e) {
-                throw new ClassNotFoundException("Failed to load class due to unexpected error: " + name, e);
-            }
-        }
-
-        return cls;
-    }
-
-    /**
-     * Load class from GAR file.
-     *
-     * @param name Class name.
-     * @return Loaded class.
-     * @throws ClassNotFoundException If no class found.
-     * @deprecated Use {@link GridUriDeploymentClassLoader#loadClassIsolated(String)} instead.
-     */
-    @Deprecated
-    public synchronized Class<?> loadClassGarOnly(String name) throws ClassNotFoundException {
-        return loadClassIsolated(name);
-    }
-
-    /** {@inheritDoc} */
-    @Override public URL getResource(String name) {
-        URL url = findResource(name);
-
-        if (url == null)
-            url = ClassLoader.getSystemResource(name);
-
-        if (url == null)
-            url = super.getResource(name);
-
-        return url;
-    }
-
-    /** {@inheritDoc} */
-    @Override public InputStream getResourceAsStream(String name) {
-        // Find resource in a deployment unit first.
-        InputStream in = getResourceAsStreamIsolated(name);
-
-        // Find resource in parent class loader.
-        if (in == null)
-            in = ClassLoader.getSystemResourceAsStream(name);
-
-        if (in == null)
-            in = super.getResourceAsStream(name);
-
-        return in;
-    }
-
-    /**
-     * Returns an input stream for reading the specified resource from a deployment unit only.
-     *
-     * @param name Resource name.
-     * @return An input stream for reading the resource, or {@code null}
-     *      if the resource could not be found.
-     */
-    @Nullable public InputStream getResourceAsStreamIsolated(String name) {
-        URL url = findResource(name);
-
-        try {
-            return url != null ? url.openStream() : null;
-        }
-        catch (IOException ignored) {
-            return null;
-        }
-    }
-
-    /**
-     * Returns an input stream for reading the specified resource from GAR file only.
-     *
-     * @param name Resource name.
-     * @return An input stream for reading the resource, or {@code null}
-     *      if the resource could not be found.
-     *
-     * @deprecated Use {@link GridUriDeploymentClassLoader#getResourceAsStreamIsolated(String)} instead.
-     */
-    @Deprecated
-    @Nullable public InputStream getResourceAsStreamGarOnly(String name) {
-        return getResourceAsStreamIsolated(name);
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(GridUriDeploymentClassLoader.class, this, "urls", Arrays.toString(getURLs()));
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassLoaderFactory.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassLoaderFactory.java
deleted file mode 100644
index 2cb21441c1c..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassLoaderFactory.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.spi.IgniteSpiException;
-
-/**
- * Factory class to create class loader that loads classes and resources from
- * the deployment archive or "unpacked" deployment archive (package directory).
- * <p>
- * Class loader scans deployment archive or directory first and than if
- * class/resource was not found scans all JAR files.
- * It is assumed that all libraries are in the {@link #DFLT_LIBS_DIR_PATH}
- * directory.
- */
-class GridUriDeploymentClassLoaderFactory {
-    /** Libraries directory default value (value is {@code lib}). */
-    public static final String DFLT_LIBS_DIR_PATH = "lib";
-
-    /**
-     * @param parent Parent class loader.
-     * @param file Deployment archive or directory with an unpacked deployment archive.
-     * @param log Logger.
-     * @return Class Loader.
-     * @throws org.apache.ignite.spi.IgniteSpiException In case of any error.
-     */
-    public static ClassLoader create(ClassLoader parent, File file, IgniteLogger log) throws IgniteSpiException {
-        assert parent != null;
-        assert file != null;
-        assert log != null;
-
-        assert file.isDirectory();
-
-        List<URL> urls = new ArrayList<>();
-
-        try {
-            String url = file.toURI().toURL().toString();
-
-            URL mainUrl = url.length() > 0 && url.charAt(url.length() - 1) == '/' ?
-                file.toURI().toURL() : new URL(url + '/');
-
-            urls.add(mainUrl);
-
-            File libDir = new File(file, DFLT_LIBS_DIR_PATH);
-
-            if (libDir.exists()) {
-                File[] files = libDir.listFiles(new FilenameFilter() {
-                    @Override public boolean accept(File dir, String name) {
-                        return name.endsWith(".jar");
-                    }
-                });
-
-                if (files.length > 0) {
-                    for (File jarFile : files) {
-                        urls.add(jarFile.toURI().toURL());
-                    }
-                }
-            }
-
-            return new GridUriDeploymentClassLoader(urls.toArray(new URL[urls.size()]), parent);
-        }
-        catch (MalformedURLException e) {
-            throw new IgniteSpiException("Failed to create class loader for a package: " + file, e);
-        }
-    }
-
-    /**
-     * Ensure singleton.
-     */
-    private GridUriDeploymentClassLoaderFactory() {
-        // No-op.
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentDiscovery.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentDiscovery.java
deleted file mode 100644
index d47ec685638..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentDiscovery.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import org.apache.ignite.compute.ComputeTask;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.IgniteSpiException;
-
-/**
- * Helper that loads classes either from directory or from JAR file.
- * <p>
- * If loading from directory is used, helper scans given directory
- * and all subdirectories recursively and loads all files
- * with ".class" extension by given class loader. If class could not
- * be loaded it will be ignored.
- * <p>
- * If JAR file loading is used helper scans JAR file and tries to
- * load all {@link JarEntry} assuming it's a file name.
- * If at least one of them could not be loaded helper fails.
- */
-final class GridUriDeploymentDiscovery {
-    /**
-     * Enforces singleton.
-     */
-    private GridUriDeploymentDiscovery() {
-        // No-op.
-    }
-
-    /**
-     * Load classes from given file. File could be either directory or JAR file.
-     *
-     * @param clsLdr Class loader to load files.
-     * @param file Either directory or JAR file which contains classes or
-     *      references to them.
-     * @return Set of found and loaded classes or empty set if file does not
-     *      exist.
-     * @throws org.apache.ignite.spi.IgniteSpiException Thrown if given JAR file references to none
-     *      existed class or IOException occurred during processing.
-     */
-    static Set<Class<? extends ComputeTask<?, ?>>> getClasses(ClassLoader clsLdr, File file)
-        throws IgniteSpiException {
-        Set<Class<? extends ComputeTask<?, ?>>> rsrcs = new HashSet<>();
-
-        if (!file.exists())
-            return rsrcs;
-
-        GridUriDeploymentFileResourceLoader fileRsrcLdr = new GridUriDeploymentFileResourceLoader(clsLdr, file);
-
-        if (file.isDirectory())
-            findResourcesInDirectory(fileRsrcLdr, file, rsrcs);
-        else {
-            try {
-                for (JarEntry entry : U.asIterable(new JarFile(file.getAbsolutePath()).entries())) {
-                    Class<? extends ComputeTask<?, ?>> rsrc = fileRsrcLdr.createResource(entry.getName(), false);
-
-                    if (rsrc != null)
-                        rsrcs.add(rsrc);
-                }
-            }
-            catch (IOException e) {
-                throw new IgniteSpiException("Failed to discover classes in file: " + file.getAbsolutePath(), e);
-            }
-        }
-
-        return rsrcs;
-    }
-
-    /**
-     * Recursively scans given directory and load all found files by loader.
-     *
-     * @param clsLdr Loader that could load class from given file.
-     * @param dir Directory which should be scanned.
-     * @param rsrcs Set which will be filled in.
-     */
-    private static void findResourcesInDirectory(GridUriDeploymentFileResourceLoader clsLdr, File dir,
-        Set<Class<? extends ComputeTask<?, ?>>> rsrcs) {
-        assert dir.isDirectory();
-
-        for (File file : dir.listFiles()) {
-            if (file.isDirectory()) {
-                // Recurse down into directories.
-                findResourcesInDirectory(clsLdr, file, rsrcs);
-            }
-            else {
-                Class<? extends ComputeTask<?, ?>> rsrc = null;
-
-                try {
-                    rsrc = clsLdr.createResource(file.getAbsolutePath(), true);
-                }
-                catch (IgniteSpiException e) {
-                    // Must never happen because we use 'ignoreUnknownRsrc=true'.
-                    assert false;
-                }
-
-                if (rsrc != null)
-                    rsrcs.add(rsrc);
-            }
-        }
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentFileProcessor.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentFileProcessor.java
deleted file mode 100644
index a564503e623..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentFileProcessor.java
+++ /dev/null
@@ -1,458 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Modifier;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-import org.apache.commons.codec.binary.Hex;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.compute.ComputeTask;
-import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.IgniteSpiException;
-import org.jetbrains.annotations.Nullable;
-
-import static org.apache.ignite.spi.deployment.uri.UriDeploymentSpi.XML_DESCRIPTOR_PATH;
-
-/**
- * Utility class.
- * <p>
- * Provides useful and common functions for URI deployment.
- */
-final class GridUriDeploymentFileProcessor {
-    /**
-     * Enforces singleton.
-     */
-    private GridUriDeploymentFileProcessor() {
-        // No-op.
-    }
-
-    /**
-     * Method processes given package and extracts all tasks from it which are
-     * either mentioned in a task descriptor or implement interface {@link org.apache.ignite.compute.ComputeTask}
-     * if there is no descriptor in file.
-     *
-     * @param file Package file with tasks.
-     * @param uri URI of the package.
-     * @param deployDir deployment directory with downloaded files.
-     * @param log Logger.
-     * @throws org.apache.ignite.spi.IgniteSpiException Thrown if file could not be read.
-     * @return List of tasks from given file.
-     */
-    @Nullable static GridUriDeploymentFileProcessorResult processFile(File file, String uri, File deployDir,
-        IgniteLogger log) throws IgniteSpiException {
-        File pkg = file;
-
-        if (!checkIntegrity(file, log)) {
-            U.error(log, "Failed to load tasks from a package (invalid file signature) [uri=" +
-                U.hidePassword(uri) + ']');
-
-            return null;
-        }
-
-        if (!file.isDirectory()) {
-            pkg = new File(deployDir, "dirzip_" + file.getName());
-
-            pkg.mkdirs();
-
-            try {
-                U.unzip(file, pkg, log);
-            }
-            catch (IOException e) {
-                throw new IgniteSpiException("IO error when unzipping a package: "
-                        + file.getAbsolutePath(), e);
-            }
-        }
-
-        GridUriDeploymentFileProcessorResult res = null;
-
-        if (pkg.isDirectory()) {
-            try {
-                File xml = new File(pkg, XML_DESCRIPTOR_PATH);
-
-                if (!xml.exists() || xml.isDirectory()) {
-                    U.warn(log,
-                        "Processing deployment without descriptor file (it will cause full classpath scan) [path="
-                        + XML_DESCRIPTOR_PATH + ", package=" + pkg.getAbsolutePath() + ']');
-
-                    res = processNoDescriptorFile(pkg, uri, log);
-                }
-                else {
-                    InputStream in = null;
-
-                    try {
-                        in = new BufferedInputStream(new FileInputStream(xml));
-
-                        // Parse XML task definitions and add them to cache.
-                        GridUriDeploymentSpringDocument doc = GridUriDeploymentSpringParser.parseTasksDocument(in, log);
-
-                        assert doc != null;
-
-                        res = processWithDescriptorFile(doc, pkg, uri, log);
-                    }
-                    finally {
-                        U.close(in, log);
-                    }
-                }
-            }
-            catch (IOException e) {
-                throw new IgniteSpiException("IO error when parsing a package: "
-                        + pkg.getAbsolutePath(), e);
-            }
-        }
-
-        if (res != null)
-            res.setMd5(md5(pkg, log));
-
-        return res;
-    }
-
-    /**
-     * Calculates md5 checksum for the given file o directory.
-     * For directories tries to walk all nested files accumulating the result.
-     *
-     * @param file file to calculate sum or root directory for accumulating calculation.
-     * @param log logger to log all failures.
-     * @return string representation of the calculated checksum or {@code null} if calculation failed.
-     */
-    @Nullable public static String md5(@Nullable File file, @Nullable IgniteLogger log) {
-        if (file != null)
-            return file.isFile() ? fileMd5(file, log) : directoryMd5(file, log);
-
-        return null;
-    }
-
-    /**
-     * Calculates md5 checksum for the given file
-     *
-     * @param file file to calculate md5.
-     * @param log logger to log all failures.
-     * @return string representation of the calculated checksum or {@code null} if calculation failed.
-     */
-    @Nullable public static String fileMd5(@Nullable File file, @Nullable IgniteLogger log) {
-        String md5 = null;
-
-        if (file != null) {
-            if (!file.isFile()) {
-                U.warn(log, "Failed to find file for md5 calculation: " + file);
-
-                return null;
-            }
-
-            InputStream in = null;
-
-            try {
-                in = new BufferedInputStream(new FileInputStream(file));
-
-                md5 = DigestUtils.md5Hex(in);
-            }
-            catch (IOException e) {
-                U.warn(log, "Failed to open input stream for md5 calculation: " + e.getMessage());
-            }
-            finally {
-                U.closeQuiet(in);
-            }
-        }
-
-        return md5;
-    }
-
-    /**
-     * For directories tries to walk all nested files accumulating them into single md5 checksum.
-     *
-     * @param dir directory to calculate md5.
-     * @param log logger to log all failures.
-     * @return string representation of the calculated checksum or {@code null} if calculation failed.
-     */
-    @Nullable public static String directoryMd5(@Nullable File dir, @Nullable IgniteLogger log) {
-        if (dir != null) {
-            if (!dir.isDirectory()) {
-                U.warn(log, "Failed to find directory for md5 calculation: " + dir);
-
-                return null;
-            }
-
-            try {
-                MessageDigest digest = MessageDigest.getInstance("MD5");
-
-                return addDirectoryDigest(dir, digest, log) ? Hex.encodeHexString(digest.digest()) : null;
-            }
-            catch (NoSuchAlgorithmException e) {
-                throw new IgniteException("MD5 digest algorithm not found.", e);
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Repulsively adds all files in the given directory to the given Digest object.
-     *
-     * @param file directory to start calculation from.
-     * @param digest digest object where all available files should be applied.
-     * @param log logger to report errors.
-     * @return {@code true} if digest was added successfully, {@code false} otherwise.
-     */
-    private static boolean addDirectoryDigest(File file, MessageDigest digest, @Nullable IgniteLogger log) {
-        assert file.isDirectory();
-
-        File[] files = file.listFiles();
-
-        if (files == null)
-            return true;
-
-        Arrays.sort(files);
-
-        for (File visited : files) {
-            if (visited.isFile()) {
-                if (!addFileDigest(visited, digest, log))
-                    return false;
-            }
-            else if (visited.isDirectory()) {
-                if (!addDirectoryDigest(visited, digest, log))
-                    return false;
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Adds given file to the given Digest object.
-     *
-     * @param file file for digest calculations.
-     * @param digest digest object to add file.
-     * @param log logger to report errors.
-     * @return {@code true} if digest was added successfully, {@code false} otherwise.
-     */
-    private static boolean addFileDigest(File file, MessageDigest digest, @Nullable IgniteLogger log) {
-        if (!file.isFile()) {
-            U.error(log, "Failed to add file to directory digest (will not check MD5 hash): " + file);
-
-            return false;
-        }
-
-        InputStream in = null;
-
-        try {
-            in = new BufferedInputStream(new FileInputStream(file));
-
-            byte[] buf = new byte[1024];
-
-            int read = in.read(buf, 0, 1024);
-
-            while (read > -1) {
-                digest.update(buf, 0, read);
-
-                read = in.read(buf, 0, 1024);
-            }
-        }
-        catch (IOException e) {
-            U.error(log, "Failed to add file to directory digest (will not check MD5 hash): " + file, e);
-
-            return false;
-        }
-        finally {
-            U.closeQuiet(in);
-        }
-
-        return true;
-    }
-
-    /**
-     * Cleanup class loaders resource.
-     *
-     * @param clsLdr Released class loader.
-     * @param log Logger.
-     */
-    static void cleanupUnit(ClassLoader clsLdr, IgniteLogger log) {
-        assert clsLdr != null;
-        assert log != null;
-        assert clsLdr instanceof URLClassLoader;
-
-        URLClassLoader clsLdr0 = (URLClassLoader)clsLdr;
-
-        U.close(clsLdr0, log);
-
-        try {
-            URL url = IgniteUtils.classLoaderUrls(clsLdr)[0];
-
-            File dir = new File(url.toURI());
-
-            U.delete(dir);
-
-            if (dir.getName().startsWith("dirzip_")) {
-                File jarFile = new File(dir.getParentFile(), dir.getName().substring(7));
-
-                U.delete(jarFile);
-            }
-        }
-        catch (Exception e) {
-            U.error(log, "Failed to cleanup unit [clsLdr=" + clsLdr + ']', e);
-        }
-    }
-
-    /**
-     * Processes given package and returns back all tasks which are in its descriptor.
-     *
-     * @param doc Package descriptor.
-     * @param file Package file.
-     * @param uri URI of the package file.
-     * @param log Logger.
-     * @throws org.apache.ignite.spi.IgniteSpiException Thrown if it's impossible to open file.
-     * @return List of tasks from descriptor.
-     */
-    private static GridUriDeploymentFileProcessorResult processWithDescriptorFile(GridUriDeploymentSpringDocument doc,
-        File file, String uri, IgniteLogger log) throws IgniteSpiException {
-        ClassLoader clsLdr = GridUriDeploymentClassLoaderFactory.create(U.gridClassLoader(), file, log);
-
-        List<Class<? extends ComputeTask<?, ?>>> tasks = doc.getTasks(clsLdr);
-
-        List<Class<? extends ComputeTask<?, ?>>> validTasks = null;
-
-        if (!F.isEmpty(tasks)) {
-            validTasks = new ArrayList<>();
-
-            for (Class<? extends ComputeTask<?, ?>> task : tasks) {
-                if (!isAllowedTaskClass(task)) {
-                    U.warn(log, "Failed to load task. Task should be public none-abstract class " +
-                        "(might be inner static one) that implements ComputeTask interface [taskCls=" + task + ']');
-                }
-                else {
-                    if (log.isDebugEnabled())
-                        log.debug("Found grid deployment task: " + task.getName());
-
-                    validTasks.add(task);
-                }
-            }
-        }
-
-        GridUriDeploymentFileProcessorResult res = new GridUriDeploymentFileProcessorResult();
-
-        res.setFile(file);
-        res.setClassLoader(clsLdr);
-
-        if (!F.isEmpty(validTasks))
-            res.setTaskClasses(validTasks);
-        else if (log.isDebugEnabled())
-            log.debug("No tasks loaded from file [file=" + file.getAbsolutePath() +
-                ", uri=" + U.hidePassword(uri) + ']');
-
-        return res;
-    }
-
-    /**
-     * Processes packages which have no descriptor. It scans every class and
-     * checks if it is a valid task or not. All valid tasks are returned back.
-     *
-     * @param file Package file or directory.
-     * @param uri URI of the package file.
-     * @param log Logger.
-     * @throws org.apache.ignite.spi.IgniteSpiException Thrown if file reading error happened.
-     * @return List of tasks from given file.
-     */
-    private static GridUriDeploymentFileProcessorResult processNoDescriptorFile(File file, String uri, IgniteLogger log)
-        throws IgniteSpiException {
-        ClassLoader clsLdr = GridUriDeploymentClassLoaderFactory.create(U.gridClassLoader(), file, log);
-
-        Set<Class<? extends ComputeTask<?, ?>>> clss = GridUriDeploymentDiscovery.getClasses(clsLdr, file);
-
-        GridUriDeploymentFileProcessorResult res = new GridUriDeploymentFileProcessorResult();
-
-        res.setFile(file);
-        res.setClassLoader(clsLdr);
-
-        if (clss != null) {
-            List<Class<? extends ComputeTask<?, ?>>> validTasks =
-                new ArrayList<>(clss.size());
-
-            for (Class<? extends ComputeTask<?, ?>> cls : clss) {
-                if (isAllowedTaskClass(cls)) {
-                    if (log.isDebugEnabled())
-                        log.debug("Found grid deployment task: " + cls.getName());
-
-                    validTasks.add(cls);
-                }
-            }
-
-            if (!validTasks.isEmpty())
-                res.setTaskClasses(validTasks);
-            else if (log.isDebugEnabled())
-                log.debug("No tasks loaded from file [file=" + file.getAbsolutePath() +
-                    ", uri=" + U.hidePassword(uri) + ']');
-        }
-
-        return res;
-    }
-
-    /**
-     * Check that class may be instantiated as {@link org.apache.ignite.compute.ComputeTask} and used
-     * in deployment.
-     *
-     * Loaded task class must implement interface {@link org.apache.ignite.compute.ComputeTask}.
-     * Only non-abstract, non-interfaces and public classes allowed.
-     * Inner static classes also allowed for loading.
-     *
-     * @param cls Class to check
-     * @return {@code true} if class allowed for deployment.
-     */
-    private static boolean isAllowedTaskClass(Class<?> cls) {
-        if (!ComputeTask.class.isAssignableFrom(cls))
-            return false;
-
-        int modifiers = cls.getModifiers();
-
-        return !Modifier.isAbstract(modifiers) && !Modifier.isInterface(modifiers) &&
-            (!cls.isMemberClass() || Modifier.isStatic(modifiers)) && Modifier.isPublic(modifiers);
-    }
-
-    /**
-     * Make integrity check for a package.
-     * Method returns {@code false} if the package has incorrect signature.
-     *
-     * @param file package which should be verified.
-     * @param log Logger.
-     * @return {@code true} if given file is a directory of verification
-     *      completed successfully otherwise returns {@code false}.
-     */
-    private static boolean checkIntegrity(File file, IgniteLogger log) {
-        try {
-            return file.isDirectory() || GridUriDeploymentJarVerifier.verify(file.getAbsolutePath(), false, log);
-        }
-        catch (IOException e) {
-            U.error(log, "Error while making integrity file check.", e);
-        }
-
-        return false;
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentFileProcessorResult.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentFileProcessorResult.java
deleted file mode 100644
index 65ba3498022..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentFileProcessorResult.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.File;
-import java.util.List;
-import org.apache.ignite.compute.ComputeTask;
-import org.apache.ignite.internal.util.typedef.internal.S;
-
-/**
- * Deployment file processing result.
- */
-class GridUriDeploymentFileProcessorResult {
-    /** Class loader. */
-    private ClassLoader clsLdr;
-
-    /** Task class. */
-    private List<Class<? extends ComputeTask<?, ?>>> taskClss;
-
-    /** Deploument unit file. */
-    private File file;
-
-    /** Hash of deployment unit. */
-    private String md5;
-
-    /**
-     * Getter for property 'clsLdr'.
-     *
-     * @return Value for property 'clsLdr'.
-     */
-    public ClassLoader getClassLoader() {
-        return clsLdr;
-    }
-
-    /**
-     * Setter for property 'clsLdr'.
-     *
-     * @param clsLdr Value to set for property 'clsLdr'.
-     */
-    public void setClassLoader(ClassLoader clsLdr) {
-        this.clsLdr = clsLdr;
-    }
-
-    /**
-     * Getter for property 'taskClss'.
-     *
-     * @return Value for property 'taskClss'.
-     */
-    public List<Class<? extends ComputeTask<?, ?>>> getTaskClasses() {
-        return taskClss;
-    }
-
-    /**
-     * Setter for property 'taskClss'.
-     *
-     * @param taskClss Value to set for property 'taskClss'.
-     */
-    public void setTaskClasses(List<Class<? extends ComputeTask<?, ?>>> taskClss) {
-        this.taskClss = taskClss;
-    }
-
-    /**
-     * Gets package file.
-     *
-     * @return Package file.
-     */
-    public File getFile() {
-        return file;
-    }
-
-    /**
-     * Sets package file.
-     *
-     * @param file Package file.
-     */
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-    /**
-     * @return md5 hash of this deployment result.
-     */
-    public String getMd5() {
-        return md5;
-    }
-
-    /**
-     * @param md5 md5 hash of this deployment result.
-     */
-    public void setMd5(String md5) {
-        this.md5 = md5;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(GridUriDeploymentFileProcessorResult.class, this);
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentFileResourceLoader.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentFileResourceLoader.java
deleted file mode 100644
index 72ad91f1b75..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentFileResourceLoader.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.File;
-import org.apache.ignite.compute.ComputeTask;
-import org.apache.ignite.spi.IgniteSpiException;
-
-/**
- * Class loader helper that could load class from the file using certain
- * class loader.
- */
-class GridUriDeploymentFileResourceLoader {
-    /** Class loader class should be loaded by. */
-    private final ClassLoader clsLdr;
-
-    /** Initial directory. */
-    private final File scanPathDir;
-
-    /**
-     * Creates new instance of loader helper.
-     *
-     * @param clsLdr Class loader class should be loaded by.
-     * @param scanPathDir Initial directory.
-     */
-    GridUriDeploymentFileResourceLoader(ClassLoader clsLdr, File scanPathDir) {
-        this.clsLdr = clsLdr;
-        this.scanPathDir = scanPathDir;
-    }
-
-    /**
-     * Creates new class from file with given file name.
-     *
-     * @param fileName Name of the class to be loaded. It might be either
-     *      fully-qualified or just a class name.
-     * @param ignoreUnknownRsrc Whether unresolved classes should be
-     *      ignored or not.
-     * @return Loaded class.
-     * @throws org.apache.ignite.spi.IgniteSpiException If class could not be loaded and
-     *      {@code ignoreUnknownRsrc} parameter is {@code true}.
-     */
-    @SuppressWarnings("unchecked")
-    Class<? extends ComputeTask<?, ?>> createResource(String fileName, boolean ignoreUnknownRsrc) throws IgniteSpiException {
-        if (scanPathDir.isDirectory())
-            fileName = fileName.substring(scanPathDir.getAbsolutePath().length() + 1);
-
-        if (fileName.endsWith(".class")) {
-            String str = fileName;
-
-            // Replace separators.
-            str = str.replaceAll("\\/|\\\\", ".");
-
-            // Strip off '.class' extension.
-            str = str.substring(0, str.indexOf(".class"));
-
-            try {
-                return (Class<? extends ComputeTask<?, ?>>)clsLdr.loadClass(str);
-            }
-            catch (ClassNotFoundException e) {
-                if (ignoreUnknownRsrc) {
-                    // No-op.
-                }
-                else
-                    throw new IgniteSpiException("Failed to load class: " + str, e);
-            }
-        }
-
-        // Not a class resource.
-        return null;
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentJarVerifier.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentJarVerifier.java
deleted file mode 100644
index 2006f38e2a1..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentJarVerifier.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.CodeSigner;
-import java.security.PublicKey;
-import java.security.cert.Certificate;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.jar.Attributes;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.jar.JarInputStream;
-import java.util.jar.Manifest;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.internal.util.typedef.internal.U;
-
-/**
- * Helper class that verifies either JAR file or JAR file input stream
- * if it is consistent or not. Consistency means that file was not changed
- * since build and all files mentioned in manifest are signed.
- */
-final class GridUriDeploymentJarVerifier {
-    /**
-     * Enforces singleton.
-     */
-    private GridUriDeploymentJarVerifier() {
-        // No-op.
-    }
-
-    /** Default buffer size = 4K. */
-    private static final int BUF_SIZE = 4096;
-
-    /**
-     * Verify JAR-file that it was not changed since creation.
-     * If parameter {@code allSigned} equals {@code true} and file is not
-     * listed in manifest than method return {@code false}. If file listed
-     * in manifest but doesn't exist in JAR-file than method return
-     * {@code false}.
-     *
-     * @param jarName JAR file name.
-     * @param allSigned If {@code true} then all files must be signed.
-     * @param log Logger.
-     * @return {@code true} if JAR file was not changed.
-     * @throws IOException Thrown if JAR file or its entries could not be read.
-     */
-    static boolean verify(String jarName, boolean allSigned, IgniteLogger log) throws IOException {
-        assert jarName != null;
-
-        return verify0(jarName, null, allSigned, log);
-    }
-
-    /**
-     * Verify JAR-file that all files declared in manifest are signed.
-     * If manifest is {@code null} than method returns {@code true} if
-     * public key is {@code null}.
-     * If parameter {@code allSigned} equals {@code true} and file not
-     * listed in manifest than method return {@code false}. If file
-     * listed in manifest but doesn't exist in JAR-file than method
-     * return {@code false}.
-     *
-     * @param jarName JAR file name.
-     * @param pubKey Public key.
-     * @param allSigned If {@code true} then all files must be signed.
-     * @param log Logger.
-     * @return {@code true} if JAR file is signed with given public key.
-     * @throws IOException Thrown if JAR file or its entries could not be read.
-     */
-    static boolean verify(String jarName, PublicKey pubKey, boolean allSigned, IgniteLogger log)
-        throws IOException {
-        assert jarName != null;
-        assert pubKey != null;
-
-        return verify0(jarName, pubKey, allSigned, log);
-    }
-
-    /**
-     * Tests whether given JAR file input stream was not changed since creation.
-     *
-     * @param in JAR file input stream.
-     * @param allSigned Hint which means that all files of all entries must be
-     *      signed.
-     * @param log Logger.
-     * @return {@code true} if JAR file input stream was not changed.
-     * @throws IOException Thrown if JAR file stream or its entries could not
-     *    be read.
-     */
-    static boolean verify(InputStream in, boolean allSigned, IgniteLogger log) throws IOException {
-        assert in != null;
-
-        return verify0(in, null, allSigned, log);
-    }
-
-    /**
-     * Tests whether given JAR file input stream is signed with public key.
-     * If manifest is {@code null} than method returns {@code true} if
-     * public key is {@code null}.
-     * If parameter {@code allSigned} equals {@code true} and file not
-     * listed in manifest than method return {@code false}. If file
-     * listed in manifest but doesn't exist in JAR-file than method
-     * return {@code false}.
-     *
-     * @param in JAR file input stream.
-     * @param pubKey Public key to be tested with.
-     * @param allSigned Hint which means that all files in entry must be signed.
-     * @param log Logger.
-     * @return {@code true} if JAR file is signed with given public key.
-     * @throws IOException Thrown if JAR file or its entries could not be read.
-     */
-    static boolean verify(InputStream in, PublicKey pubKey, boolean allSigned, IgniteLogger log)
-        throws IOException {
-        assert in != null;
-        assert pubKey != null;
-
-        return verify0(in, pubKey, allSigned, log);
-    }
-
-    /**
-     * Tests whether all files in given JAR file input stream are signed
-     * with public key. If manifest is {@code null} than method returns
-     * {@code true} if public key is null.
-     *
-     * @param in JAR file input stream.
-     * @param pubKey Public key to be tested with.
-     * @param allSigned Hint which means that all files in entry must be signed.
-     * @param log Logger.
-     * @return {@code true} if JAR file is signed with given public key.
-     * @throws IOException Thrown if JAR file or its entries could not be read.
-     */
-    private static boolean verify0(InputStream in, PublicKey pubKey, boolean allSigned, IgniteLogger log)
-        throws IOException {
-        assert in != null;
-
-        JarInputStream jin = null;
-
-        try {
-            jin = new JarInputStream(in, true);
-
-            Manifest manifest = jin.getManifest();
-
-            // Manifest must be included into a signed package.
-            if (manifest == null)
-                return pubKey == null;
-
-            Set<String> manifestFiles = getSignedFiles(manifest);
-
-            JarEntry jarEntry;
-
-            while ((jarEntry = jin.getNextJarEntry()) != null) {
-                if (jarEntry.isDirectory())
-                    continue;
-
-                // Verify by reading the file if altered.
-                // Will return quietly if no problem.
-                verifyDigestsImplicitly(jin);
-
-                if (!verifyEntry(jarEntry, manifest, pubKey, allSigned, true))
-                    return false;
-
-                manifestFiles.remove(jarEntry.getName());
-            }
-
-            return manifestFiles.size() <= 0;
-        }
-        catch (SecurityException e) {
-            if (log.isDebugEnabled())
-                log.debug("Got security error (ignoring): " + e.getMessage());
-        }
-        finally {
-            U.close(jin, log);
-        }
-
-        return false;
-    }
-
-    /**
-     * Tests whether all files in given JAR file are signed
-     * with public key. If manifest is {@code null} than method returns
-     * {@code true} if public key is null.
-     * <p>
-     * <strong>DO NOT REFACTOR THIS METHOD. THERE IS A SUN DEFECT ABOUT PROCESSING JAR AS
-     * FILE AND AS STREAM. THE PROCESSING IS DIFFERENT.</strong>
-     *
-     * @param jarName JAR file name.
-     * @param pubKey Public key to be tested with.
-     * @param allSigned Hint which means that all files in entry must be signed.
-     * @param log Logger.
-     * @return {@code true} if JAR file is signed with given public key.
-     * @throws IOException Thrown if JAR file or its entries could not be read.
-     */
-    private static boolean verify0(String jarName, PublicKey pubKey, boolean allSigned, IgniteLogger log)
-        throws IOException {
-        JarFile jarFile = null;
-
-        try {
-            jarFile = new JarFile(jarName, true);
-
-            Manifest manifest = jarFile.getManifest();
-
-            // Manifest must be included into a signed package.
-            if (manifest == null)
-                return pubKey == null;
-
-            Set<String> manifestFiles = getSignedFiles(manifest);
-
-            Enumeration<JarEntry> entries = jarFile.entries();
-
-            while (entries.hasMoreElements()) {
-                JarEntry jarEntry = entries.nextElement();
-
-                if (jarEntry.isDirectory())
-                    continue;
-
-                // Verify by reading the file if altered.
-                // Will return quietly if no problem.
-                verifyDigestsImplicitly(jarFile.getInputStream(jarEntry));
-
-                if (!verifyEntry(jarEntry, manifest, pubKey, allSigned, false))
-                    return false;
-
-                manifestFiles.remove(jarEntry.getName());
-            }
-
-            return manifestFiles.size() <= 0;
-        }
-        catch (SecurityException e) {
-            if (log.isDebugEnabled())
-                log.debug("Got security error (ignoring): " + e.getMessage());
-        }
-        finally {
-            U.close(jarFile, log);
-        }
-
-        return false;
-    }
-
-    /**
-     * Tests whether given JAR entry from manifest contains at least one
-     * certificate with given public key.
-     * <p>
-     * Files which starts with "META-INF/" are always verified successfully.
-     *
-     * @param jarEntry Tested JAR entry.
-     * @param manifest Manifest this entry belongs to.
-     * @param pubKey Public key we are testing. If it is {@code null} returns
-     *      {@code true}.
-     * @param allSigned Hint which means that all files in entry must be signed.
-     * @param makeCerts If {@code true} JAR entry certificates are scanned.
-     *      Otherwise all JAR entry signers certificates  are scanned.
-     * @return {@code true} if JAR entry is verified {@code false} otherwise.
-     */
-    private static boolean verifyEntry(JarEntry jarEntry, Manifest manifest, PublicKey pubKey, boolean allSigned,
-        boolean makeCerts) {
-        assert jarEntry != null;
-        assert manifest != null;
-
-        boolean inManifest = false;
-
-        String entryName = jarEntry.getName();
-
-        // Check that entry name contains in manifest file.
-        if (manifest.getAttributes(entryName) != null || manifest.getAttributes("./" + entryName) != null ||
-            manifest.getAttributes('/' + entryName) != null)
-            inManifest = true;
-
-        // Don't ignore files not listed in manifest and META-INF directory.
-        if (allSigned && !inManifest && !entryName.toUpperCase().startsWith("META-INF/"))
-            return false;
-
-        // Looking at entries in manifest file.
-        if (inManifest) {
-            Certificate[] certs = !makeCerts ? jarEntry.getCertificates() : getCertificates(jarEntry);
-
-            boolean isSigned = certs != null && certs.length > 0;
-
-            if (!isSigned || pubKey != null && !findKeyInCertificates(pubKey, certs))
-                return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * This checks that everything is valid and unchanged from the digest
-     * listed in the manifest next to the name.
-     *
-     * @param in JAR file or JAR entry input stream.
-     * @throws IOException Thrown if read fails.
-     */
-    private static void verifyDigestsImplicitly(InputStream in) throws IOException {
-        byte[] buf = new byte[BUF_SIZE];
-
-        while (in.read(buf, 0, buf.length) != -1) {
-            // Just read the entry. Will throw a SecurityException if signature
-            // or digest check fails. Since we instantiated JarFile with parameter
-            // true, that tells it to verify that the files match the digests
-            // and haven't been changed.
-        }
-    }
-
-    /**
-     * Tests whether given certificate contains public key or not.
-     *
-     * @param key Public key which we are looking for.
-     * @param certs Certificate which should be tested.
-     * @return {@code true} if certificate contains given key and
-     *      {@code false} if not.
-     */
-    private static boolean findKeyInCertificates(PublicKey key, Certificate[] certs) {
-        if (key == null || certs == null)
-            return false;
-
-        for (Certificate cert : certs) {
-            if (cert.getPublicKey().equals(key))
-                return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Gets all signed files from the manifest.
-     * <p>
-     * It scans all manifest entries and their attributes. If there is an attribute
-     * name which ends with "-DIGEST" we are assuming that manifest entry name is a
-     * signed file name.
-     *
-     * @param manifest JAR file manifest.
-     * @return Either empty set if none found or set of signed file names.
-     */
-    private static Set<String> getSignedFiles(Manifest manifest) {
-        Set<String> fileNames = new HashSet<>();
-
-        Map<String, Attributes> entries = manifest.getEntries();
-
-        if (entries != null && entries.size() > 0) {
-            for (Map.Entry<String, Attributes> entry : entries.entrySet()) {
-                Attributes attrs = entry.getValue();
-
-                for (Map.Entry<Object, Object> attrEntry : attrs.entrySet()) {
-                    if (attrEntry.getKey().toString().toUpperCase().endsWith("-DIGEST")) {
-                        fileNames.add(entry.getKey());
-
-                        break;
-                    }
-                }
-            }
-        }
-
-        return fileNames;
-    }
-
-    /**
-     * Gets all JAR file entry certificates.
-     * Method scans entry for signers and than collects all their certificates.
-     *
-     * @param entry JAR file entry.
-     * @return Array of certificates which corresponds to the entry.
-     */
-    private static Certificate[] getCertificates(JarEntry entry) {
-        Certificate[] certs = null;
-
-        CodeSigner[] signers = entry.getCodeSigners();
-
-        // Extract the certificates in each code signer's cert chain.
-        if (signers != null) {
-            List<Certificate> certChains = new ArrayList<>();
-
-            for (CodeSigner signer : signers)
-                certChains.addAll(signer.getSignerCertPath().getCertificates());
-
-            // Convert into a Certificate[]
-            return certChains.toArray(new Certificate[certChains.size()]);
-        }
-
-        return certs;
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringDocument.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringDocument.java
deleted file mode 100644
index 0143537c522..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringDocument.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import org.apache.ignite.compute.ComputeTask;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.spi.IgniteSpiException;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.xml.XmlBeanFactory;
-
-/**
- * Helper class which helps to read deployer and tasks information from
- * {@code Spring} configuration file.
- */
-class GridUriDeploymentSpringDocument {
-    /** Initialized springs beans factory. */
-    private final XmlBeanFactory factory;
-
-    /** List of tasks from package description. */
-    private List<Class<? extends ComputeTask<?, ?>>> tasks;
-
-    /**
-     * Creates new instance of configuration helper with given configuration.
-     *
-     * @param factory Configuration factory.
-     */
-    GridUriDeploymentSpringDocument(XmlBeanFactory factory) {
-        assert factory != null;
-
-        this.factory = factory;
-    }
-
-    /**
-     * Loads tasks declared in configuration by given class loader.
-     *
-     * @param clsLdr Class loader.
-     * @return Declared tasks.
-     * @throws org.apache.ignite.spi.IgniteSpiException Thrown if there are no tasks in
-     *      configuration or configuration could not be read.
-     */
-    @SuppressWarnings({"unchecked"})
-    List<Class<? extends ComputeTask<?, ?>>> getTasks(ClassLoader clsLdr) throws IgniteSpiException {
-        assert clsLdr != null;
-
-        try {
-            if (tasks == null) {
-                tasks = new ArrayList<>();
-
-                Map<String, List> beans = factory.getBeansOfType(List.class);
-
-                if (!beans.isEmpty()) {
-                    for (List<String> list : beans.values()) {
-                        for (String clsName : list) {
-                            Class taskCls;
-
-                            try {
-                                taskCls = clsLdr.loadClass(clsName);
-                            }
-                            catch (ClassNotFoundException e) {
-                                throw new IgniteSpiException("Failed to load task class [className=" + clsName + ']', e);
-                            }
-
-                            assert taskCls != null;
-
-                            tasks.add(taskCls);
-                        }
-                    }
-                }
-            }
-        }
-        catch (BeansException e) {
-            throw new IgniteSpiException("Failed to get tasks declared in XML file.", e);
-        }
-
-        return tasks;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(GridUriDeploymentSpringDocument.class, this);
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringParser.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringParser.java
deleted file mode 100644
index 842a8cf9be0..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringParser.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.IgniteSpiException;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.xml.XmlBeanFactory;
-import org.springframework.core.io.ByteArrayResource;
-import org.springframework.core.io.InputStreamResource;
-
-/**
- * Workaround for {@link InputStreamResource}. Converts input stream with XML
- * to {@code GridUriDeploymentSpringDocument} with {@link ByteArrayResource}
- * instead of {@link InputStreamResource}.
- */
-final class GridUriDeploymentSpringParser {
-    /**
-     * Enforces singleton.
-     */
-    private GridUriDeploymentSpringParser() {
-        // No-op.
-    }
-
-    /**
-     * Converts given input stream expecting XML inside to
-     * {@link GridUriDeploymentSpringDocument}.
-     * <p>
-     * This is a workaround for the {@link InputStreamResource} which does
-     * not work properly.
-     *
-     * @param in Input stream with XML.
-     * @param log Logger
-     * @return Grid wrapper for the input stream.
-     * @throws org.apache.ignite.spi.IgniteSpiException Thrown if incoming input stream could not be
-     *      read or parsed by {@code Spring} {@link XmlBeanFactory}.
-     * @see XmlBeanFactory
-     */
-    static GridUriDeploymentSpringDocument parseTasksDocument(InputStream in, IgniteLogger log) throws
-        IgniteSpiException {
-        assert in != null;
-
-        // Note: use ByteArrayResource instead of InputStreamResource because InputStreamResource doesn't work.
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        try {
-            U.copy(in, out);
-
-            XmlBeanFactory factory = new XmlBeanFactory(new ByteArrayResource(out.toByteArray()));
-
-            return new GridUriDeploymentSpringDocument(factory);
-        }
-        catch (BeansException | IOException e) {
-            throw new IgniteSpiException("Failed to parse spring XML file.", e);
-        }
-        finally {
-            U.close(out, log);
-        }
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentUnitDescriptor.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentUnitDescriptor.java
deleted file mode 100644
index 22965c4b427..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentUnitDescriptor.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import org.apache.ignite.internal.util.tostring.GridToStringExclude;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.P1;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.lang.IgniteBiTuple;
-import org.jetbrains.annotations.Nullable;
-
-import static org.apache.ignite.spi.deployment.uri.GridUriDeploymentUnitDescriptor.Type.CLASS;
-import static org.apache.ignite.spi.deployment.uri.GridUriDeploymentUnitDescriptor.Type.FILE;
-
-/**
- * Container for information about tasks and file where classes placed. It also contains tasks instances.
- */
-class GridUriDeploymentUnitDescriptor {
-    /**
-     * Container type.
-     */
-    @SuppressWarnings({"PackageVisibleInnerClass"}) enum Type {
-        /**
-         * Container has reference to the file with tasks.
-         */
-        FILE,
-
-        /**
-         * Container keeps tasks deployed directly.
-         */
-        CLASS
-    }
-
-    /**
-     * Container type.
-     */
-    private final Type type;
-
-    /**
-     * If type is {@link Type#FILE} contains URI of {@link #file} otherwise must be null.
-     */
-    @GridToStringExclude
-    private final String uri;
-
-    /**
-     * If type is {@link Type#FILE} contains file with tasks otherwise must be null.
-     */
-    private final File file;
-
-    /**
-     * Tasks deployment timestamp.
-     */
-    private final long tstamp;
-
-    /** */
-    private final ClassLoader clsLdr;
-
-    /** Set of all resources. */
-    private final Set<Class<?>> rsrcs = new HashSet<>();
-
-    /** Map of resources by alias. */
-    private final Map<String, Class<?>> rsrcsByAlias = new HashMap<>();
-
-    /**
-     * If type is {@link Type#FILE} and digest was computed successfully contains MD5 digest of the source file.
-     */
-    private final String md5;
-
-    /**
-     * Constructs descriptor for a deployment unit.
-     *
-     * @param uri URI of the deployment unit.
-     * @param file File itself.
-     * @param tstamp Tasks deployment timestamp.
-     * @param clsLdr Class loader.
-     * @param md5 Hash of unit file of directory.
-     */
-    GridUriDeploymentUnitDescriptor(String uri, File file, long tstamp, ClassLoader clsLdr, String md5) {
-        assert uri != null;
-        assert file != null;
-        assert tstamp > 0;
-
-        this.uri = uri;
-        this.file = file;
-        this.tstamp = tstamp;
-        this.clsLdr = clsLdr;
-        this.md5 = md5;
-
-        type = FILE;
-    }
-
-    /**
-     * Constructs a deployment unit descriptor based on timestamp and {@link org.apache.ignite.compute.ComputeTask}
-     * instances.
-     *
-     * @param tstamp Tasks deployment timestamp.
-     * @param clsLdr Class loader.
-     */
-    GridUriDeploymentUnitDescriptor(long tstamp, ClassLoader clsLdr) {
-        assert clsLdr != null;
-        assert tstamp > 0;
-
-        this.tstamp = tstamp;
-        this.clsLdr = clsLdr;
-
-        uri = null;
-        file = null;
-        md5 = null;
-        type = CLASS;
-    }
-
-    /**
-     * Gets descriptor type.
-     *
-     * @return Descriptor type.
-     */
-    public Type getType() {
-        return type;
-    }
-
-    /**
-     * Gets file URL.
-     *
-     * @return {@code null} if tasks were deployed directly and reference to the package file URI if tasks
-     * were deployed from the file.
-     */
-    public String getUri() {
-        return uri;
-    }
-
-    /**
-     * Tasks' package file.
-     *
-     * @return {@code null} if tasks were deployed directly and package file if tasks were deployed from it.
-     */
-    public File getFile() {
-        return file;
-    }
-
-    /**
-     * Gets tasks deployment timestamp.
-     *
-     * @return Tasks deployment timestamp.
-     */
-    public long getTimestamp() {
-        return tstamp;
-    }
-
-    /**
-     * Source file MD5 digest.
-     *
-     * @return MD5 digest of the source file if it is available, otherwise {@code null}.
-     */
-    public String getMd5() {
-        return md5;
-    }
-
-    /**
-     * Deployed task.
-     *
-     * @return Deployed task.
-     */
-    public ClassLoader getClassLoader() {
-        return clsLdr;
-    }
-
-    /**
-     * Adds resource to this descriptor.
-     *
-     * @param cls Resource class.
-     */
-    public void addResource(Class<?> cls) {
-        rsrcs.add(cls);
-    }
-
-    /**
-     * Adds resource by alias to this descriptor.
-     *
-     * @param alias Resource alias.
-     * @param cls Resource class.
-     */
-    public void addResource(String alias, Class<?> cls) {
-        rsrcsByAlias.put(alias, cls);
-
-        rsrcs.add(cls);
-    }
-
-    /**
-     * Gets resource by alias.
-     *
-     * @param alias Resource alias.
-     * @return Resource class or {@code null}, if there is no resource
-     *         for this alias.
-     */
-    @Nullable public Class<?> getResourceByAlias(String alias) {
-        return rsrcsByAlias.get(alias);
-    }
-
-    /**
-     * Gets resource by alias map.
-     *
-     * @return Unmodifiable resource by alias map.
-     */
-    public Map<String, Class<?>> getResourcesByAlias() {
-        return Collections.unmodifiableMap(rsrcsByAlias);
-    }
-
-    /**
-     * Gets a full resource set.
-     *
-     * @return Unmodifiable resource set.
-     */
-    public Set<Class<?>> getResources() {
-        return Collections.unmodifiableSet(rsrcs);
-    }
-
-    /**
-     * Looks up for resource by name (either full class name or alias).
-     *
-     * @param rsrcName Resource name (either full class name or alias).
-     * @return Tuple of resource class and alias or {@code null}, if
-     *         resource is not found. The second tuple member is
-     *         {@code null} if the resource has no alias.
-     */
-    @Nullable public IgniteBiTuple<Class<?>, String> findResource(final String rsrcName) {
-        // Find by alias.
-        Class<?> cls = rsrcsByAlias.get(rsrcName);
-
-        if (cls != null)
-            return F.<Class<?>, String>t(cls, rsrcName);
-
-        // Find by class name.
-        cls = F.find(rsrcs, null, new P1<Class<?>>() {
-            @Override public boolean apply(Class<?> cls0) {
-                return cls0.getName().equals(rsrcName);
-            }
-        });
-
-        return cls != null ? F.<Class<?>, String>t(cls, null) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        return clsLdr.hashCode();
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object obj) {
-        return obj instanceof GridUriDeploymentUnitDescriptor &&
-            clsLdr.equals(((GridUriDeploymentUnitDescriptor)obj).clsLdr);
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(GridUriDeploymentUnitDescriptor.class, this, "uri", U.hidePassword(uri));
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentUriParser.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentUriParser.java
deleted file mode 100644
index b5f77e911ca..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentUriParser.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import org.apache.ignite.internal.util.tostring.GridToStringExclude;
-import org.apache.ignite.internal.util.typedef.internal.S;
-
-/**
- * Helper class which encodes given string.
- * It replaces all occurrences of space with '%20', percent sign
- * with '%25' and semicolon with '%3B' if given string corresponds to
- * expected format.
- * <p>
- * Expected format is (schema):(//)URL(?|#)(parameters)
- */
-class GridUriDeploymentUriParser {
-    /** Input string which should be parsed and encoded. */
-    private final String input;
-
-    /** Encoded string. */
-    @GridToStringExclude private String encoded;
-
-    /**
-     * Creates new instance of parser for the given input string.
-     *
-     * @param input Input string which will be parsed.
-     */
-    GridUriDeploymentUriParser(String input) {
-        assert input != null;
-
-        this.input = input;
-
-        encoded = input;
-    }
-
-    /**
-     * Parses {@link #input} by extracting URL without schema and parameters
-     * and than encodes this URL.
-     * <p>
-     * Expected {@link #input} format is (schema):(//)URL(?|#)(parameters)
-     *
-     * @return Either encoded string or unchanged if it does not match format.
-     */
-    String parse() {
-        int n = input.length();
-
-        // Scheme.
-        int p = scan(0, n, "/?#", ":");
-
-        if (p > 0 && at(p, n, ':')) {
-            p++;            // Skip ':'
-
-            if (at(p, n, '/')) {
-                if (at(p, n, '/') && at(p + 1, n, '/')) {
-                    p += 2;
-
-                    // Seek authority.
-                    int q = scan(p, n, "", "/?#");
-
-                    if (q > p)
-                        p = q;
-                }
-
-                int q = scan(p, n, "", "?#");
-
-                StringBuilder buf = new StringBuilder(input.substring(0, p));
-
-                buf.append(encodePath(input.substring(p, q)));
-                buf.append(input.substring(q, n));
-
-                encoded = buf.toString();
-            }
-        }
-
-        return encoded;
-    }
-
-    /**
-     * Scan forward from the given start position.  Stop at the first char
-     * in the err string (in which case -1 is returned), or the first char
-     * in the stop string (in which case the index of the preceding char is
-     * returned), or the end of the input string (in which case the length
-     * of the input string is returned).  May return the start position if
-     * none matches.
-     *
-     * @param start Start scan position.
-     * @param end End scan position.
-     * @param err Error characters.
-     * @param stop Stoppers.
-     * @return {@code -1} if character from the error characters list was found;
-     *      index of first character occurrence is on stop character list; end
-     *      position if {@link #input} does not contain any characters
-     *      from {@code error} or {@code stop}; start if start > end.
-     */
-    private int scan(int start, int end, String err, String stop) {
-        int p = start;
-
-        while (p < end) {
-            char c = input.charAt(p);
-
-            if (err.indexOf(c) >= 0)
-                return -1;
-
-            if (stop.indexOf(c) >= 0)
-                break;
-
-            p++;
-        }
-
-        return p;
-    }
-
-    /**
-     * Tests whether {@link #input} contains {@code c} at position {@code start}
-     * and {@code start} less than {@code end}.
-     *
-     * @param start Start position.
-     * @param end End position.
-     * @param c Character {@link #input} is tested against
-     * @return {@code true} only if {@link #input} contains {@code c} at position
-     *      {@code start} and {@code start} less than {@code end}.
-     */
-    private boolean at(int start, int end, char c) {
-        return start < end && input.charAt(start) == c;
-    }
-
-    /**
-     * Encodes given path by replacing all occurrences of space with '%20',
-     * percent sign with '%25' and semicolon with '%3B'.
-     *
-     * @param path Path to be encoded.
-     * @return Encoded path.
-     */
-    private String encodePath(String path) {
-        StringBuilder buf = new StringBuilder(path.length());
-
-        for (int i = 0; i < path.length(); i++) {
-            char c = path.charAt(i);
-
-            switch (c) {
-                case ' ': {
-                    buf.append("%20"); break;
-                }
-
-                case '%': {
-                    buf.append("%25"); break;
-                }
-                case ';': {
-                    buf.append("%3B"); break;
-                }
-
-                default: {
-                    buf.append(c);
-                }
-            }
-        }
-
-        return buf.toString();
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(GridUriDeploymentUriParser.class, this);
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/UriDeploymentSpi.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/UriDeploymentSpi.java
deleted file mode 100644
index 2639cc62c1a..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/UriDeploymentSpi.java
+++ /dev/null
@@ -1,1408 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.InputStream;
-import java.io.Serializable;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.compute.ComputeTask;
-import org.apache.ignite.compute.ComputeTaskName;
-import org.apache.ignite.internal.IgniteInterruptedCheckedException;
-import org.apache.ignite.internal.util.tostring.GridToStringExclude;
-import org.apache.ignite.internal.util.tostring.GridToStringInclude;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.A;
-import org.apache.ignite.internal.util.typedef.internal.LT;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.lang.IgniteBiTuple;
-import org.apache.ignite.resources.LoggerResource;
-import org.apache.ignite.spi.IgniteSpiAdapter;
-import org.apache.ignite.spi.IgniteSpiConfiguration;
-import org.apache.ignite.spi.IgniteSpiConsistencyChecked;
-import org.apache.ignite.spi.IgniteSpiException;
-import org.apache.ignite.spi.IgniteSpiMBeanAdapter;
-import org.apache.ignite.spi.IgniteSpiMultipleInstancesSupport;
-import org.apache.ignite.spi.deployment.DeploymentListener;
-import org.apache.ignite.spi.deployment.DeploymentResource;
-import org.apache.ignite.spi.deployment.DeploymentResourceAdapter;
-import org.apache.ignite.spi.deployment.DeploymentSpi;
-import org.apache.ignite.spi.deployment.uri.scanners.GridUriDeploymentScannerListener;
-import org.apache.ignite.spi.deployment.uri.scanners.UriDeploymentScanner;
-import org.apache.ignite.spi.deployment.uri.scanners.UriDeploymentScannerManager;
-import org.apache.ignite.spi.deployment.uri.scanners.file.UriDeploymentFileScanner;
-import org.apache.ignite.spi.deployment.uri.scanners.http.UriDeploymentHttpScanner;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Implementation of {@link org.apache.ignite.spi.deployment.DeploymentSpi} which can deploy tasks from
- * different sources like file system folders, email and HTTP.
- * There are different ways to deploy tasks in grid and every deploy method
- * depends on selected source protocol. This SPI is configured to work
- * with a list of URI's. Every URI contains all data about protocol/transport
- * plus configuration parameters like credentials, scan frequency, and others.
- * <p>
- * When SPI establishes a connection with an URI, it downloads deployable units
- * to the temporary directory in order to prevent it from any changes while
- * scanning. Use method {@link #setTemporaryDirectoryPath(String) setTemporaryDirectoryPath(String)})
- * to set custom temporary folder for downloaded deployment units. SPI will
- * create folder under the path with name identical to local node ID.
- * <p>
- * SPI tracks all changes of every given URI. This means that if any file is
- * changed or deleted, SPI will re-deploy or delete corresponding tasks.
- * Note that the very first apply to {@link #findResource(String)}
- * is blocked until SPI finishes scanning all URI's at least once.
- * <p>
- * There are several deployable unit types supported:
- * <ul>
- * <li>JAR file.</li>
- * <li>GAR file.</li>
- * <li>Local disk folder with structure of an unpacked deployment archive.</li>
- * <li>Local disk folder containing only compiled Java classes.</li>
- * </ul>
- * <h1 class="header">Deployment package</h1>
- * Deployment package can be represented as a regular JAR file with a specific structure similar to WAR format.
- * Package files can have {@code '.jar'} or {@code '.gar'} extension.
- * <p>
- * Package structure:
- *   <pre class="snippet">
- *      META-INF/
- *              |
- *               - ignite.xml
- *               - ...
- *      lib/
- *         |
- *          -some-lib.jar
- *          - ...
- *      xyz.class
- *      ...</pre>
- * <ul>
- * <li>
- * {@code META-INF/} entry may contain {@code ignite.xml} file which is a
- * task descriptor file. The purpose of task descriptor XML file is to specify
- * all tasks to be deployed. This file is a regular
- * <a href="https://spring.io/docs">Spring</a> XML
- * definition file.  {@code META-INF/} entry may also contain any other file
- * specified by JAR format.
- * </li>
- * <li>
- * {@code lib/} entry contains all library dependencies.
- * </li>
- * <li>Compiled Java classes must be placed in the root of a package file.</li>
- * </ul>
- * A package may be deployed without a descriptor file. If there is no descriptor file, SPI
- * will scan all classes in archive and instantiate those that implement
- * {@link org.apache.ignite.compute.ComputeTask} interface. In that case, all grid task classes must have a
- * public no-argument constructor. Use {@link org.apache.ignite.compute.ComputeTaskAdapter} adapter for
- * convenience when creating grid tasks.
- * <p>
- * By default, all downloaded packages that have digital signature in {@code META-INF}
- * folder will be verified and deployed only if signature is valid.
- * <p>
- * <h1 class="header">URI</h1>
- * This SPI uses a hierarchical URI definition. For more information about standard URI
- * syntax refer to {@link URI java.net.URI} documentation.
- * <blockquote class="snippet">
- * [<i>scheme</i><tt><b>:</b></tt>][<tt><b>//</b></tt><i>authority</i>][<i>path</i>][<tt><b>?</b></tt><i>query</i>]
- * [<tt><b>#</b></tt><i>fragment</i>]</blockquote>
- * <p>
- * Every URI defines its own deployment repository which will be scanned for any changes.
- * URI itself has all information about protocol, connectivity, scan intervals and other
- * parameters.
- * <p>
- * URI's may contain special characters, like spaces. If {@code encodeUri}
- * flag is set to {@code true} (see {@link #setEncodeUri(boolean)}), then
- * URI 'path' field will be automatically encoded. By default this flag is
- * set to {@code true}.
- * <p>
- * <h1 class="header">Code Example</h1>
- * The following example demonstrates how the deployment SPI can be used. It expects that you have a package file
- * in 'home/username/ignite/work/my_deployment/file' folder which contains 'myproject.HelloWorldTask' class.
- * <pre name="code" class="java">
- * IgniteConfiguration cfg = new IgniteConfiguration();
- *
- * DeploymentSpi deploymentSpi = new UriDeploymentSpi();
- *
- * deploymentSpi.setUriList(Arrays.asList("file:///home/username/ignite/work/my_deployment/file"));
- *
- * cfg.setDeploymentSpi(deploymentSpi);
- *
- * try (Ignite ignite = Ignition.start(cfg)) {
- *     ignite.compute().execute("myproject.HelloWorldTask", "my args");
- * }
- * </pre>
- * <h1 class="header">Configuration</h1>
- * {@code UriDeploymentSpi} has the following optional configuration
- * parameters (there are no mandatory parameters):
- * <ul>
- * <li>
- * Array of {@link UriDeploymentScanner}-s which will be used to deploy resources
- * (see {@link #setScanners(UriDeploymentScanner...)}). If not specified, preconfigured {@link UriDeploymentFileScanner}
- * and {@link UriDeploymentHttpScanner} are used. You can implement your own scanner
- * by implementing {@link UriDeploymentScanner} interface.
- * </li>
- * <li>
- * Temporary directory path where scanned packages are
- * copied to (see {@link #setTemporaryDirectoryPath(String) setTemporaryDirectoryPath(String)}).
- * </li>
- * <li>
- * List of URIs to scan (see {@link #setUriList(List)}). If not
- * specified, then URI specified by {@link #DFLT_DEPLOY_DIR DFLT_DEPLOY_DIR} is used.
- * </li>
- * <li>
- * Flag to control encoding of the {@code 'path'} portion of URI
- * (see {@link #setEncodeUri(boolean) setEncodeUri(boolean)}).
- * </li>
- * </ul>
- * <h1 class="header">Protocols</h1>
- * Following protocols are supported by this SPI out of the box:
- * <ul>
- * <li><a href="#file">file://</a> - File protocol</li>
- * <li><a href="#http">http://</a> - HTTP protocol</li>
- * <li><a href="#http">https://</a> - Secure HTTP protocol</li>
- * </ul>
- * <strong>Custom Protocols.</strong>
- * <p>
- * You can add support for additional protocols if needed. To do this implement UriDeploymentScanner interface and
- * plug your implementation into the SPI via {@link #setScanners(UriDeploymentScanner...)} method.
- * <p>
- * In addition to SPI configuration parameters, all necessary configuration
- * parameters for selected URI should be defined in URI. Different protocols
- * have different configuration parameters described below. Parameters are
- * separated by '{@code ;}' character.
- * <p>
- * <h1 class="header">File</h1>
- * For this protocol SPI will scan folder specified by URI on file system and
- * download any deplloyment files or directories that end with .jar or .gar from source
- * directory defined in URI. For file system URI must have scheme equal to {@code file}.
- * <p>
- * Following parameters are supported:
- * <table class="doctable">
- *  <tr>
- *      <th>Parameter</th>
- *      <th>Description</th>
- *      <th>Optional</th>
- *      <th>Default</th>
- *  </tr>
- *  <tr>
- *      <td>freq</td>
- *      <td>Scanning frequency in milliseconds.</td>
- *      <td>Yes</td>
- *      <td>{@code 5000} ms specified in {@link UriDeploymentFileScanner#DFLT_SCAN_FREQ}.</td>
- *  </tr>
- * </table>
- * <h2 class="header">File URI Example</h2>
- * The following example will scan {@code 'c:/Program files/ignite/deployment'}
- * folder on local box every {@code '1000'} milliseconds. Note that since path
- * has spaces, {@link #setEncodeUri(boolean) setEncodeUri(boolean)} parameter must
- * be set to {@code true} (which is default behavior).
- * <blockquote class="snippet">
- * {@code file://freq=2000@localhost/c:/Program files/ignite/deployment}
- * </blockquote>
- * <a name="classes"></a>
- * <h2 class="header">HTTP/HTTPS</h2>
- * URI deployment scanner tries to read DOM of the html it points to and parses out href attributes of all &lt;a&gt; tags
- * - this becomes the collection of URLs to deployment package files that should be deployed. It's important that
- * HTTP scanner uses {@code URLConnection.getLastModified()} method to check if there were any changes since last
- * iteration for each deployment file before redeploying.
- * <p>
- * Following parameters are supported:
- * <table class="doctable">
- *  <tr>
- *      <th>Parameter</th>
- *      <th>Description</th>
- *      <th>Optional</th>
- *      <th>Default</th>
- *  </tr>
- *  <tr>
- *      <td>freq</td>
- *      <td>Scanning frequency in milliseconds.</td>
- *      <td>Yes</td>
- *      <td>{@code 300000} ms specified in {@link UriDeploymentHttpScanner#DFLT_SCAN_FREQ}.</td>
- *  </tr>
- * </table>
- * <h2 class="header">HTTP URI Example</h2>
- * The following example will download the page `www.mysite.com/ignite/deployment`, parse it and download and deploy
- * all deployment packages specified by href attributes of &lt;a&gt; elements on the page using authentication
- * {@code 'username:password'} every '10000' milliseconds (only new/updated packages).
- * <blockquote class="snippet">
- * {@code http://username:password;freq=10000@www.mysite.com:110/ignite/deployment}
- * </blockquote>
- * <h2 class="header">Java Example</h2>
- * UriDeploymentSpi needs to be explicitly configured to override default local deployment SPI.
- * <pre name="code" class="java">
- * UriDeploymentSpi deploySpi = new UriDeploymentSpi();
- *
- * IgniteConfiguration cfg = new IgniteConfiguration();
- *
- * // Set URIs.
- * deploySpi.setUriList(Arrays.asList("http://www.site.com/tasks",
- *     "file://freq=20000@localhost/c:/Program files/gg-deployment"));
- *
- * // Override temporary directory path.
- * deploySpi.setTemporaryDirectoryPath("c:/tmp/grid");
- *
- * //  Override default deployment SPI.
- * cfg.setDeploymentSpi(deploySpi);
- *
- * //  Start grid.
- * Ignition.start(cfg);
- * </pre>
- * <p>
- * <h2 class="header">Spring Example</h2>
- * UriDeploymentSpi can be configured from Spring XML configuration file:
- * <pre name="code" class="xml">
- * &lt;bean id="grid.custom.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" singleton="true"&gt;
- *         ...
- *         &lt;property name="deploymentSpi"&gt;
- *             &lt;bean class="org.apache.ignite.grid.spi.deployment.uri.UriDeploymentSpi"&gt;
- *                 &lt;property name="temporaryDirectoryPath" value="c:/tmp/grid"/&gt;
- *                 &lt;property name="uriList"&gt;
- *                     &lt;list&gt;
- *                         &lt;value&gt;http://www.site.com/tasks&lt;/value&gt;
- *                         &lt;value&gt;file://freq=20000@localhost/c:/Program files/gg-deployment&lt;/value&gt;
- *                     &lt;/list&gt;
- *                 &lt;/property&gt;
- *             &lt;/bean&gt;
- *         &lt;/property&gt;
- *         ...
- * &lt;/bean&gt;
- * </pre>
- * <p>
- * <img src="http://ignite.apache.org/images/spring-small.png">
- * <br>
- * For information about Spring framework visit <a href="http://www.springframework.org/">www.springframework.org</a>
- * @see org.apache.ignite.spi.deployment.DeploymentSpi
- */
-@IgniteSpiMultipleInstancesSupport(true)
-@IgniteSpiConsistencyChecked(optional = false)
-@SuppressWarnings({"FieldAccessedSynchronizedAndUnsynchronized"})
-public class UriDeploymentSpi extends IgniteSpiAdapter implements DeploymentSpi {
-    /**
-     * Default deployment directory where SPI will pick up packages. Note that this path is relative to
-     * {@code IGNITE_HOME/work} folder if {@code IGNITE_HOME} system or environment variable specified,
-     * otherwise it is relative to {@code work} folder under system {@code java.io.tmpdir} folder.
-     *
-     * @see org.apache.ignite.configuration.IgniteConfiguration#getWorkDirectory()
-     */
-    public static final String DFLT_DEPLOY_DIR = "deployment/file";
-
-    /** Default task description file path and name (value is {@code META-INF/ignite.xml}). */
-    public static final String XML_DESCRIPTOR_PATH = "META-INF/ignite.xml";
-
-    /**
-     * Default temporary directory name relative to file path
-     * {@link #setTemporaryDirectoryPath(String)}} (value is {@code gg.uri.deployment.tmp}).
-     */
-    public static final String DEPLOY_TMP_ROOT_NAME = "gg.uri.deployment.tmp";
-
-    /** Temporary directory name. */
-    private String tmpDirPath;
-
-    /** Sub-folder of 'tmpDirPath'. */
-    private String deployTmpDirPath;
-
-    /** List of URIs to be scanned. */
-    @GridToStringInclude
-    private List<String> uriList = new ArrayList<>();
-
-    /** List of encoded URIs. */
-    private Collection<URI> uriEncodedList = new ArrayList<>();
-
-    /** Indicates whether md5 digest should be checked by this SPI before file deployment. */
-    private boolean checkMd5;
-
-    /** */
-    private final LinkedList<GridUriDeploymentUnitDescriptor> unitLoaders = new LinkedList<>();
-
-    /** */
-    @SuppressWarnings({"TypeMayBeWeakened"})
-    @GridToStringExclude
-    private final LastTimeUnitDescriptorComparator unitComp = new LastTimeUnitDescriptorComparator();
-
-    /** List of scanner managers. Every URI has it's own manager. */
-    private final Collection<UriDeploymentScannerManager> mgrs = new ArrayList<>();
-
-    /** Whether URIs should be encoded or not. */
-    private boolean encodeUri = true;
-
-    /** Whether first scan cycle is completed or not. */
-    private int firstScanCntr;
-
-    /** Deployment listener which processes all notifications from scanners. */
-    private volatile DeploymentListener lsnr;
-
-    /** */
-    private final Object mux = new Object();
-
-    /** */
-    @LoggerResource
-    private IgniteLogger log;
-
-    /** NOTE: flag for test purposes only. */
-    private boolean delayOnNewOrUpdatedFile;
-
-    /** Configured scanners. */
-    private UriDeploymentScanner[] scanners;
-
-    /**
-     * Sets absolute path to temporary directory which will be used by
-     * deployment SPI to keep all deployed classes in.
-     * <p>
-     * If not provided, default value is {@code java.io.tmpdir} system property value.
-     *
-     * @param tmpDirPath Temporary directory path.
-     * @return {@code this} for chaining.
-     */
-    @IgniteSpiConfiguration(optional = true)
-    public UriDeploymentSpi setTemporaryDirectoryPath(String tmpDirPath) {
-        this.tmpDirPath = tmpDirPath;
-
-        return this;
-    }
-
-    /**
-     * Sets list of URI which point to a directory with packages and which should be
-     * scanned by SPI for the new tasks.
-     * <p>
-     * If not provided, default value is list with
-     * {@code file://${IGNITE_HOME}/work/deployment/file} element.
-     * Note that system property {@code IGNITE_HOME} must be set.
-     * For unknown {@code IGNITE_HOME} list of URI must be provided explicitly.
-     *
-     * @param uriList Package file URIs.
-     * @return {@code this} for chaining.
-     */
-    @IgniteSpiConfiguration(optional = true)
-    public UriDeploymentSpi setUriList(List<String> uriList) {
-        this.uriList = uriList;
-
-        return this;
-    }
-
-    /**
-     * If set to {@code true} then SPI should exclude files with same md5s from deployment.
-     * Otherwise it should try to load new unit regardless to possible file duplication.
-     *
-     * @param checkMd5 new value for the property
-     * @return {@code this} for chaining.
-     */
-    @IgniteSpiConfiguration(optional = true)
-    public UriDeploymentSpi setCheckMd5(boolean checkMd5) {
-        this.checkMd5 = checkMd5;
-
-        return this;
-    }
-
-    /**
-     * Gets {@code checkMd5} property.
-     *
-     * @return value of the {@code checkMd5} property.
-     */
-    public boolean isCheckMd5() {
-        return checkMd5;
-    }
-
-    /**
-     * Indicates that URI must be encoded before usage. Encoding means replacing
-     * all occurrences of space with '%20', percent sign with '%25'
-     * and semicolon with '%3B'.
-     * <p>
-     * If not provided, default value is {@code true}.
-     *
-     * @param encodeUri {@code true} if every URI should be encoded and
-     *      {@code false} otherwise.
-     * @return {@code this} for chaining.
-     */
-    @IgniteSpiConfiguration(optional = true)
-    public UriDeploymentSpi setEncodeUri(boolean encodeUri) {
-        this.encodeUri = encodeUri;
-
-        return this;
-    }
-
-    /**
-     * Gets temporary directory path.
-     *
-     * @return Temporary directory path.
-     */
-    public String getTemporaryDirectoryPath() {
-        return tmpDirPath;
-    }
-
-    /**
-     * Gets list of URIs that are processed by SPI.
-     *
-     * @return List of URIs.
-     */
-    public List<String> getUriList() {
-        return Collections.unmodifiableList(uriList);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void setListener(@Nullable DeploymentListener lsnr) {
-        this.lsnr = lsnr;
-    }
-
-    /**
-     * Gets scanners.
-     *
-     * @return Scanners.
-     */
-    public UriDeploymentScanner[] getScanners() {
-        return scanners;
-    }
-
-    /**
-     * Sets scanners.
-     *
-     * @param scanners Scanners.
-     * @return {@code this} for chaining.
-     */
-    @IgniteSpiConfiguration(optional = true)
-    public UriDeploymentSpi setScanners(UriDeploymentScanner... scanners) {
-        this.scanners = scanners;
-
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void spiStop() throws IgniteSpiException {
-        for (UriDeploymentScannerManager mgr : mgrs)
-            mgr.cancel();
-
-        for (UriDeploymentScannerManager mgr : mgrs)
-            mgr.join();
-
-        // Clear inner collections.
-        uriEncodedList.clear();
-        mgrs.clear();
-
-        List<ClassLoader> tmpClsLdrs;
-
-        // Release all class loaders.
-        synchronized (mux) {
-            tmpClsLdrs = new ArrayList<>(unitLoaders.size());
-
-            for (GridUriDeploymentUnitDescriptor desc : unitLoaders)
-                tmpClsLdrs.add(desc.getClassLoader());
-        }
-
-        for (ClassLoader ldr : tmpClsLdrs)
-            onUnitReleased(ldr);
-
-        // Delete temp directory.
-        if (deployTmpDirPath != null)
-            U.delete(new File(deployTmpDirPath));
-
-        unregisterMBean();
-
-        // Ack ok stop.
-        if (log.isDebugEnabled())
-            log.debug(stopInfo());
-    }
-
-    /** {@inheritDoc} */
-    @Override public void spiStart(String igniteInstanceName) throws IgniteSpiException {
-        // Start SPI start stopwatch.
-        startStopwatch();
-
-        assertParameter(uriList != null, "uriList != null");
-
-        initializeUriList();
-
-        if (uriEncodedList.isEmpty())
-            addDefaultUri();
-
-        initializeTemporaryDirectoryPath();
-
-        registerMBean(igniteInstanceName, new UriDeploymentSpiMBeanImpl(this), UriDeploymentSpiMBean.class);
-
-        FilenameFilter filter = new FilenameFilter() {
-            @Override public boolean accept(File dir, String name) {
-                assert name != null;
-
-                String nameLowerCase = name.toLowerCase();
-
-                return nameLowerCase.endsWith(".gar") || nameLowerCase.endsWith(".jar");
-            }
-        };
-
-        firstScanCntr = 0;
-
-        GridUriDeploymentScannerListener lsnr = new GridUriDeploymentScannerListener() {
-            @Override public void onNewOrUpdatedFile(File file, String uri, long tstamp) {
-                if (log.isInfoEnabled())
-                    log.info("Found new or updated deployment unit [uri=" + U.hidePassword(uri) +
-                        ", file=" + file.getAbsolutePath() + ", tstamp=" + tstamp + ']');
-
-                if (delayOnNewOrUpdatedFile) {
-                    U.warn(log, "Delaying onNewOrUpdatedFile() by 10000 ms since 'delayOnNewOrUpdatedFile' " +
-                        "is set to true (is this intentional?).");
-
-                    try {
-                        U.sleep(10000);
-                    }
-                    catch (IgniteInterruptedCheckedException ignored) {
-                        // No-op
-                    }
-
-                    U.warn(log, "Delay finished.");
-                }
-
-                try {
-                    GridUriDeploymentFileProcessorResult fileRes = GridUriDeploymentFileProcessor.processFile(file, uri,
-                        new File(deployTmpDirPath), log);
-
-                    if (fileRes != null)
-                        newUnitReceived(uri, fileRes.getFile(), tstamp, fileRes.getClassLoader(),
-                            fileRes.getTaskClasses(), fileRes.getMd5());
-                }
-                catch (IgniteSpiException e) {
-                    U.error(log, "Error when processing file: " + file.getAbsolutePath(), e);
-                }
-            }
-
-            /** {@inheritDoc} */
-            @Override public void onDeletedFiles(List<String> uris) {
-                if (log.isInfoEnabled()) {
-                    List<String> uriList = null;
-
-                    if (uris != null) {
-                        uriList = new ArrayList<>();
-
-                        for (String uri : uris)
-                            uriList.add(U.hidePassword(uri));
-                    }
-
-                    if (log.isInfoEnabled())
-                        log.info("Found deleted deployment units [uris=" + uriList + ']');
-                }
-
-                processDeletedFiles(uris);
-            }
-
-            /** {@inheritDoc} */
-            @Override public void onFirstScanFinished() {
-                synchronized (mux) {
-                    firstScanCntr++;
-
-                    if (isFirstScanFinished(firstScanCntr))
-                        mux.notifyAll();
-                }
-            }
-        };
-
-        // Set default scanners if none are configured.
-        if (scanners == null) {
-            scanners = new UriDeploymentScanner[2];
-
-            scanners[0] = new UriDeploymentFileScanner();
-            scanners[1] = new UriDeploymentHttpScanner();
-        }
-
-        for (URI uri : uriEncodedList) {
-            File file = new File(deployTmpDirPath);
-
-            long freq = -1;
-
-            try {
-                freq = getFrequencyFromUri(uri);
-            }
-            catch (NumberFormatException e) {
-                U.error(log, "Error parsing parameter value for frequency.", e);
-            }
-
-            UriDeploymentScannerManager mgr = null;
-
-            for (UriDeploymentScanner scanner : scanners) {
-                if (scanner.acceptsURI(uri)) {
-                    mgr = new UriDeploymentScannerManager(igniteInstanceName, uri, file, freq > 0 ? freq :
-                        scanner.getDefaultScanFrequency(), filter, lsnr, log, scanner);
-
-                    break;
-                }
-            }
-
-            if (mgr == null)
-                throw new IgniteSpiException("Unsupported URI (please configure appropriate scanner): " + uri);
-
-            mgrs.add(mgr);
-
-            mgr.start();
-        }
-
-        // Ack parameters.
-        if (log.isDebugEnabled()) {
-            log.debug(configInfo("tmpDirPath", tmpDirPath));
-            log.debug(configInfo("uriList", uriList));
-            log.debug(configInfo("encodeUri", encodeUri));
-            log.debug(configInfo("scanners", mgrs));
-        }
-
-        // Ack ok start.
-        if (log.isDebugEnabled())
-            log.debug(startInfo());
-    }
-
-    /**
-     * Gets URI refresh frequency.
-     * URI is parsed and {@code freq} parameter value returned.
-     *
-     * @param uri URI to be parsed.
-     * @return {@code -1} if there if no {@code freq} parameter otherwise
-     *      returns frequency.
-     * @throws NumberFormatException Thrown if {@code freq} parameter value
-     *      is not a number.
-     */
-    private long getFrequencyFromUri(URI uri) throws NumberFormatException {
-        assert uri != null;
-
-        String userInfo = uri.getUserInfo();
-
-        if (userInfo != null) {
-            String[] arr = userInfo.split(";");
-
-            if (arr.length > 0)
-                for (String el : arr)
-                    if (el.startsWith("freq="))
-                        return Long.parseLong(el.substring(5));
-        }
-
-        return -1;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public DeploymentResource findResource(String rsrcName) {
-        assert rsrcName != null;
-
-        // Wait until all scanner managers finish their first scanning.
-        try {
-            synchronized (mux) {
-                while (!isFirstScanFinished(firstScanCntr))
-                    mux.wait(5000);
-            }
-        }
-        catch (InterruptedException e) {
-            U.error(log, "Failed to wait while all scanner managers finish their first scanning.", e);
-
-            Thread.currentThread().interrupt();
-
-            return null;
-        }
-
-        synchronized (mux) {
-            // Last updated class loader has highest priority in search.
-            for (GridUriDeploymentUnitDescriptor unitDesc : unitLoaders) {
-                // Try to find resource for current class loader.
-                String clsName = rsrcName;
-                Class<?> clsByAlias = unitDesc.getResourcesByAlias().get(rsrcName);
-
-                if (clsByAlias != null)
-                    clsName = clsByAlias.getName();
-
-                try {
-                    ClassLoader ldr = unitDesc.getClassLoader();
-
-                    Class<?> cls = ldr instanceof GridUriDeploymentClassLoader ?
-                        ((GridUriDeploymentClassLoader)ldr).loadClassIsolated(clsName) :
-                        ldr.loadClass(clsName);
-
-                    assert cls != null;
-
-                    IgniteBiTuple<Class<?>, String> rsrc = unitDesc.findResource(rsrcName);
-
-                    if (rsrc != null) {
-                        // Recalculate resource name in case if access is performed by
-                        // class name and not the resource name.
-                        String alias = rsrc.get2();
-
-                        return new DeploymentResourceAdapter(
-                            alias != null ? alias : rsrcName,
-                            cls,
-                            unitDesc.getClassLoader());
-                    }
-                    // Ignore invalid tasks.
-                    else if (!ComputeTask.class.isAssignableFrom(cls)) {
-                        unitDesc.addResource(cls);
-
-                        return new DeploymentResourceAdapter(rsrcName, cls, unitDesc.getClassLoader());
-                    }
-                }
-                catch (ClassNotFoundException ignored) {
-                    // No-op.
-                }
-            }
-
-            return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean register(ClassLoader ldr, Class<?> rsrc) throws IgniteSpiException {
-        A.notNull(ldr, "ldr");
-        A.notNull(rsrc, "rsrc");
-
-        long tstamp = U.currentTimeMillis();
-
-        Collection<ClassLoader> rmvClsLdrs = new ArrayList<>();
-
-        Map<String, String> newRsrcs;
-
-        synchronized (mux) {
-            GridUriDeploymentUnitDescriptor desc = null;
-
-            // Find existing class loader.
-            for (GridUriDeploymentUnitDescriptor unitDesc : unitLoaders)
-                if (unitDesc.getClassLoader().equals(ldr)) {
-                    desc = unitDesc;
-
-                    break;
-                }
-
-            if (desc == null) {
-                desc = new GridUriDeploymentUnitDescriptor(tstamp, ldr);
-
-                // New unit has largest timestamp.
-                assert unitLoaders.size() <= 0 || unitComp.compare(desc, unitLoaders.getFirst()) <= 0;
-
-                unitLoaders.addFirst(desc);
-            }
-
-            newRsrcs = addResources(ldr, desc, new Class<?>[]{rsrc});
-
-            if (!F.isEmpty(newRsrcs))
-                removeResources(ldr, newRsrcs, rmvClsLdrs);
-        }
-
-        for (ClassLoader cldLdr : rmvClsLdrs)
-            onUnitReleased(cldLdr);
-
-        return !F.isEmpty(newRsrcs);
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean unregister(String rsrcName) {
-        assert rsrcName != null;
-
-        Collection<ClassLoader> rmvClsLdrs = new ArrayList<>();
-
-        boolean rmv;
-
-        synchronized (mux) {
-            Map<String, String> rsrcs = U.newHashMap(1);
-
-            rsrcs.put(rsrcName, rsrcName);
-
-            rmv = removeResources(null, rsrcs, rmvClsLdrs);
-        }
-
-        for (ClassLoader cldLdr : rmvClsLdrs)
-            onUnitReleased(cldLdr);
-
-        return rmv;
-    }
-
-    /**
-     * Add new classes in class loader resource map.
-     * Note that resource map may contain two entries for one added class:
-     * task name -> class name and class name -> class name.
-     *
-     * @param ldr Registered class loader.
-     * @param desc Deployment descriptor.
-     * @param clss Registered classes array.
-     * @return Map of new resources added for registered class loader.
-     * @throws org.apache.ignite.spi.IgniteSpiException If resource already registered. Exception thrown
-     * if registered resources conflicts with rule when all task classes must be
-     * annotated with different task names.
-     */
-    @Nullable private Map<String, String> addResources(ClassLoader ldr, GridUriDeploymentUnitDescriptor desc, Class<?>[] clss)
-        throws IgniteSpiException {
-        assert ldr != null;
-        assert desc != null;
-        assert clss != null;
-
-        // Maps resources to classes.
-        // Map may contain 2 entries for one class.
-        Map<String, Class<?>> alias2Cls = new HashMap<>(clss.length * 2, 1.0f);
-
-        // Check alias collision between added classes.
-        for (Class<?> cls : clss) {
-            String alias = null;
-
-            if (ComputeTask.class.isAssignableFrom(cls)) {
-                ComputeTaskName nameAnn = U.getAnnotation(cls, ComputeTaskName.class);
-
-                if (nameAnn != null)
-                    alias = nameAnn.value();
-            }
-
-            // If added classes maps to one alias.
-            if (alias != null && alias2Cls.containsKey(alias) && !alias2Cls.get(alias).equals(cls))
-                throw new IgniteSpiException("Failed to register resources with given task name " +
-                    "(found another class with same task name) [taskName=" + alias +
-                    ", cls1=" + cls.getName() + ", cls2=" + alias2Cls.get(alias).getName() + ", ldr=" + ldr + ']');
-
-            if (alias != null) {
-                alias2Cls.put(alias, cls);
-
-                desc.addResource(alias, cls);
-            }
-            else
-                desc.addResource(cls);
-        }
-
-        Map<String, String> newRsrcs = null;
-
-        // Check collisions between added and exist classes.
-        for (Entry<String, Class<?>> entry : alias2Cls.entrySet()) {
-            String newAlias = entry.getKey();
-            String newName = entry.getValue().getName();
-            Class<?> cls = desc.getResourceByAlias(newAlias);
-
-            if (cls != null) {
-                // Different classes for the same resource name.
-                if (!cls.getName().equals(newName))
-                    throw new IgniteSpiException("Failed to register resources with given task name " +
-                        "(found another class with same task name in the same class loader) [taskName=" + newAlias +
-                        ", existingCls=" + cls.getName() + ", newCls=" + newName + ", ldr=" + ldr + ']');
-            }
-            // Add resources that should be removed for another class loaders.
-            else {
-                if (newRsrcs == null)
-                    newRsrcs = U.newHashMap(alias2Cls.size() + clss.length);
-
-                newRsrcs.put(newAlias, newName);
-                newRsrcs.put(newName, newName);
-            }
-        }
-
-        return newRsrcs;
-    }
-
-    /**
-     * Remove resources for all class loaders except {@code ignoreClsLdr}.
-     *
-     * @param ignoreClsLdr Ignored class loader or {@code null} to remove for all class loaders.
-     * @param rsrcs Resources that should be used in search for class loader to remove.
-     * @param rmvClsLdrs Class loaders to remove.
-     * @return {@code True} if resource was removed.
-     */
-    private boolean removeResources(@Nullable ClassLoader ignoreClsLdr, Map<String, String> rsrcs,
-        Collection<ClassLoader> rmvClsLdrs) {
-        assert Thread.holdsLock(mux);
-        assert rsrcs != null;
-
-        boolean res = false;
-
-        for (Iterator<GridUriDeploymentUnitDescriptor> iter = unitLoaders.iterator(); iter.hasNext();) {
-            GridUriDeploymentUnitDescriptor desc = iter.next();
-            ClassLoader ldr = desc.getClassLoader();
-
-            if (ignoreClsLdr == null || !ldr.equals(ignoreClsLdr)) {
-                boolean isRmv = false;
-
-                // Check class loader's registered resources.
-                for (String rsrcName : rsrcs.keySet()) {
-                    IgniteBiTuple<Class<?>, String> rsrc = desc.findResource(rsrcName);
-
-                    // Remove class loader if resource found.
-                    if (rsrc != null) {
-                        iter.remove();
-
-                        // Add class loaders in collection to notify listener outside synchronization block.
-                        rmvClsLdrs.add(ldr);
-
-                        isRmv = true;
-                        res = true;
-
-                        break;
-                    }
-                }
-
-                if (isRmv)
-                    continue;
-
-                // Check is possible to load resources with classloader.
-                for (Entry<String, String> entry : rsrcs.entrySet()) {
-                    // Check classes with class loader only when classes points to classes to avoid redundant check.
-                    // Resources map contains two entries for class with task name(alias).
-                    if (entry.getKey().equals(entry.getValue()) && isResourceExist(ldr, entry.getKey())) {
-                        iter.remove();
-
-                        // Add class loaders in collection to notify listener outside synchronization block.
-                        rmvClsLdrs.add(ldr);
-
-                        res = true;
-
-                        break;
-                    }
-                }
-            }
-        }
-
-        return res;
-    }
-
-    /**
-     * Check is class can be reached.
-     *
-     * @param ldr Class loader.
-     * @param clsName Class name.
-     * @return {@code true} if class can be loaded.
-     */
-    private boolean isResourceExist(ClassLoader ldr, String clsName) {
-        String rsrc = clsName.replaceAll("\\.", "/") + ".class";
-
-        InputStream in = null;
-
-        try {
-            in = ldr instanceof GridUriDeploymentClassLoader ?
-                ((GridUriDeploymentClassLoader)ldr).getResourceAsStreamIsolated(rsrc) :
-                ldr.getResourceAsStream(rsrc);
-
-            return in != null;
-        }
-        finally {
-            U.close(in, log);
-        }
-    }
-
-    /**
-     * Tests whether first scan is finished or not.
-     *
-     * @param cntr Number of already scanned URIs.
-     * @return {@code true} if all URIs have been scanned at least once and
-     *      {@code false} otherwise.
-     */
-    private boolean isFirstScanFinished(int cntr) {
-        assert uriEncodedList != null;
-
-        return cntr >= uriEncodedList.size();
-    }
-
-    /**
-     * Fills in list of URIs with all available URIs and encodes them if
-     * encoding is enabled.
-     *
-     * @throws org.apache.ignite.spi.IgniteSpiException Thrown if at least one URI has incorrect syntax.
-     */
-    private void initializeUriList() throws IgniteSpiException {
-        for (String uri : uriList) {
-            assertParameter(uri != null, "uriList.get(X) != null");
-
-            String encUri = encodeUri(uri.replaceAll("\\\\", "/"));
-
-            URI uriObj;
-
-            try {
-                uriObj = new URI(encUri);
-            }
-            catch (URISyntaxException e) {
-                throw new IgniteSpiException("Failed to parse URI [uri=" + U.hidePassword(uri) +
-                    ", encodedUri=" + U.hidePassword(encUri) + ']', e);
-            }
-
-            if (uriObj.getScheme() == null || uriObj.getScheme().trim().isEmpty())
-                throw new IgniteSpiException("Failed to get 'scheme' from URI [uri=" +
-                    U.hidePassword(uri) +
-                    ", encodedUri=" + U.hidePassword(encUri) + ']');
-
-            uriEncodedList.add(uriObj);
-        }
-    }
-
-    /**
-     * Add configuration for file scanner.
-     *
-     * @throws org.apache.ignite.spi.IgniteSpiException Thrown if default URI syntax is incorrect.
-     */
-    private void addDefaultUri() throws IgniteSpiException {
-        assert uriEncodedList != null;
-
-        URI uri;
-
-        try {
-            uri = U.resolveWorkDirectory(ignite.configuration().getWorkDirectory(), DFLT_DEPLOY_DIR, false).toURI();
-        }
-        catch (IgniteCheckedException e) {
-            throw new IgniteSpiException("Failed to initialize default file scanner", e);
-        }
-
-        uriEncodedList.add(uri);
-    }
-
-    /**
-     * Encode URI path if encoding is enabled. Set of encoded characters
-     * in path is (' ', ';', '%').
-     *
-     * @param path URI which should be encoded.
-     * @return Either encoded URI if encoding is enabled or given one
-     *      if encoding is disabled.
-     */
-    private String encodeUri(String path) {
-        return encodeUri ? new GridUriDeploymentUriParser(path).parse() : path;
-    }
-
-    /**
-     * Initializes temporary directory path. Path consists of base path
-     * (either {@link #tmpDirPath} value or {@code java.io.tmpdir}
-     * system property value if first is {@code null}) and path relative
-     * to base one - {@link #DEPLOY_TMP_ROOT_NAME}/{@code local node ID}.
-     *
-     * @throws org.apache.ignite.spi.IgniteSpiException Thrown if temporary directory could not be created.
-     */
-    private void initializeTemporaryDirectoryPath() throws IgniteSpiException {
-        String tmpDirPath = this.tmpDirPath == null ? System.getProperty("java.io.tmpdir") : this.tmpDirPath;
-
-        if (tmpDirPath == null)
-            throw new IgniteSpiException("Error initializing temporary deployment directory.");
-
-        File dir = new File(tmpDirPath + File.separator + DEPLOY_TMP_ROOT_NAME + File.separator +
-            ignite.configuration().getNodeId());
-
-        if (!U.mkdirs(dir))
-            throw new IgniteSpiException("Error initializing temporary deployment directory: " + dir);
-
-        if (!dir.isDirectory())
-            throw new IgniteSpiException("Temporary deployment directory path is not a valid directory: " + dir);
-
-        if (!dir.canRead() || !dir.canWrite())
-            throw new IgniteSpiException("Can not write to or read from temporary deployment directory: " + dir);
-
-        this.tmpDirPath = tmpDirPath;
-
-        deployTmpDirPath = dir.getPath();
-    }
-
-    /**
-     * Deploys all tasks that correspond to given descriptor.
-     * First method checks tasks versions and stops processing tasks that
-     * have both versioned and unversioned instances.
-     * <p>
-     * Than it deletes tasks with lower version and deploys newest tasks.
-     *
-     * @param newDesc Tasks deployment descriptor.
-     * @param clss Registered classes.
-     */
-    private void newUnitReceived(GridUriDeploymentUnitDescriptor newDesc, Collection<Class<?>> clss) {
-        assert newDesc != null;
-        assert newDesc.getType() == GridUriDeploymentUnitDescriptor.Type.FILE;
-
-        if (clss != null && !clss.isEmpty()) {
-            try {
-                addResources(newDesc.getClassLoader(), newDesc, clss.toArray(new Class<?>[clss.size()]));
-            }
-            catch (IgniteSpiException e) {
-                U.warn(log, "Failed to register a class loader for a package [newDesc=" + newDesc +
-                    ", msg=" + e.getMessage() + ']');
-            }
-        }
-
-        Collection<ClassLoader> rmvClsLdrs = new ArrayList<>();
-
-        synchronized (mux) {
-            if (checkMd5 && unitDeployed(newDesc.getMd5())) {
-                if (log.isInfoEnabled())
-                    LT.info(log, "Skipping new deployment unit because of md5 match " +
-                        "[uri='" + U.hidePassword(newDesc.getUri()) +
-                        "', file=" + (newDesc.getFile() == null ? "N/A" : newDesc.getFile()) + ']');
-
-                return;
-            }
-
-            boolean isAdded = false;
-            boolean ignoreNewUnit = false;
-
-            for (ListIterator<GridUriDeploymentUnitDescriptor> iter = unitLoaders.listIterator();
-                 iter.hasNext();) {
-                GridUriDeploymentUnitDescriptor desc = iter.next();
-
-                assert !newDesc.getClassLoader().equals(desc.getClassLoader()) :
-                    "URI scanners always create new class loader for every package: " + newDesc;
-
-                // Only for deployment archives. Undeploy all for overwritten packages.
-                if (desc.getType() == GridUriDeploymentUnitDescriptor.Type.FILE &&
-                    newDesc.getUri().equals(desc.getUri()) && !newDesc.getFile().equals(desc.getFile())) {
-                    // Remove descriptor.
-                    iter.remove();
-
-                    // Add class loaders in collection to notify listener outside synchronization block.
-                    rmvClsLdrs.add(desc.getClassLoader());
-
-                    // Last descriptor.
-                    if (!iter.hasNext())
-                        // New descriptor will be added after loop.
-                        break;
-
-                    continue;
-                }
-
-                if (!isAdded) {
-                    // Unit with largest timestamp win.
-                    // Insert it before current element.
-                    if (unitComp.compare(newDesc, desc) <= 0) {
-                        // Remove current class loader if found collisions.
-                        if (checkUnitCollision(desc, newDesc)) {
-                            iter.remove();
-                            iter.add(newDesc);
-
-                            // Add class loaders in collection to notify listener outside synchronization block.
-                            rmvClsLdrs.add(desc.getClassLoader());
-                        }
-                        // Or add new class loader before current class loader.
-                        else {
-                            iter.set(newDesc);
-                            iter.add(desc);
-                        }
-
-                        isAdded = true;
-                    }
-                    else if (checkUnitCollision(newDesc, desc)) {
-                        // Don't add new unit if found collisions with latest class loader.
-                        ignoreNewUnit = true;
-                        break;
-                    }
-                }
-                // New descriptor already added and we need to check other class loaders for collisions.
-                else if (checkUnitCollision(newDesc, desc)) {
-                    iter.remove();
-
-                    // Add class loaders in collection to notify listener outside synchronization block.
-                    rmvClsLdrs.add(desc.getClassLoader());
-                }
-            }
-
-            if (!ignoreNewUnit) {
-                if (!isAdded)
-                    unitLoaders.add(newDesc);
-
-                if (log.isDebugEnabled())
-                    LT.info(log, "Class loader (re)registered [clsLdr=" + newDesc.getClassLoader() +
-                        ", tstamp=" + newDesc.getTimestamp() +
-                        ", uri='" + U.hidePassword(newDesc.getUri()) +
-                        "', file=" + (newDesc.getFile() == null ? "N/A" : newDesc.getFile()) + ']');
-            }
-        }
-
-        for (ClassLoader cldLdr : rmvClsLdrs)
-            onUnitReleased(cldLdr);
-    }
-
-    /**
-     * Check task resource collisions in added descriptor {@code newDesc} with another
-     * descriptor {@code existDesc}.
-     *
-     * @param newDesc New added descriptor.
-     * @param existDesc Exist descriptor.
-     * @return {@code True} if collisions found.
-     */
-    private boolean checkUnitCollision(GridUriDeploymentUnitDescriptor newDesc,
-        GridUriDeploymentUnitDescriptor existDesc) {
-        assert newDesc != null;
-        assert existDesc != null;
-
-        Map<String, Class<?>> rsrcsByAlias = newDesc.getResourcesByAlias();
-
-        for (Entry<String, Class<?>> entry : existDesc.getResourcesByAlias().entrySet()) {
-            String rsrcName = entry.getKey();
-
-            if (rsrcsByAlias.containsKey(rsrcName)) {
-                U.warn(log, "Found collision with task name in a different package. " +
-                    "Class loader will be removed [taskName=" + rsrcName + ", cls1=" + rsrcsByAlias.get(rsrcName) +
-                    ", cls2=" + entry.getValue() + ", newDesc=" + newDesc + ", existDesc=" + existDesc + ']');
-
-                return true;
-            }
-        }
-
-        for (Class<?> rsrcCls : existDesc.getResources()) {
-            if (!ComputeTask.class.isAssignableFrom(rsrcCls) &&
-                isResourceExist(newDesc.getClassLoader(), rsrcCls.getName())) {
-                U.warn(log, "Found collision with task class in different deployment packages. " +
-                    "Class loader will be removed [taskCls=" + rsrcCls +
-                    ", removedDesc=" + newDesc + ", existDesc=" + existDesc + ']');
-
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Deploys or redeploys given tasks.
-     *
-     * @param uri Package file URI.
-     * @param file Package file.
-     * @param tstamp File modification date.
-     * @param ldr Class loader.
-     * @param clss List of tasks which were found in the package.
-     * @param md5 md5 of the new unit.
-     */
-    private void newUnitReceived(String uri, File file, long tstamp, ClassLoader ldr,
-        Collection<Class<? extends ComputeTask<?, ?>>> clss, @Nullable String md5) {
-        assert uri != null;
-        assert file != null;
-        assert tstamp > 0;
-
-        // To avoid units with incorrect timestamp.
-        tstamp = Math.min(tstamp, U.currentTimeMillis());
-
-        // Create descriptor.
-        GridUriDeploymentUnitDescriptor desc = new GridUriDeploymentUnitDescriptor(uri, file, tstamp, ldr, md5);
-
-        newUnitReceived(desc, clss != null && !clss.isEmpty() ? new ArrayList<Class<?>>(clss) : null);
-    }
-
-    /**
-     * Removes all tasks that belong to package files which are on list
-     * of removed files.
-     *
-     * @param uris List of removed files.
-     */
-    @SuppressWarnings({"TypeMayBeWeakened"})
-    private void processDeletedFiles(List<String> uris) {
-        assert uris != null;
-
-        if (uris.isEmpty())
-            return;
-
-        synchronized (mux) {
-            Set<String> uriSet = new HashSet<>(uris);
-
-            for (Iterator<GridUriDeploymentUnitDescriptor> iter = unitLoaders.iterator(); iter.hasNext();) {
-                GridUriDeploymentUnitDescriptor desc = iter.next();
-
-                if (desc.getType() == GridUriDeploymentUnitDescriptor.Type.FILE && uriSet.contains(desc.getUri())) {
-                    // Remove descriptor.
-                    iter.remove();
-
-                    onUnitReleased(desc.getClassLoader());
-                }
-            }
-        }
-    }
-
-    /**
-     * Notifies listener about released class loader.
-     *
-     * @param clsLdr Released class loader.
-     */
-    private void onUnitReleased(ClassLoader clsLdr) {
-        // Make sure we don't remove system class loader.
-        if (!clsLdr.equals(getClass().getClassLoader()))
-            GridUriDeploymentFileProcessor.cleanupUnit(clsLdr, log);
-
-        DeploymentListener tmp = lsnr;
-
-        if (tmp != null)
-            tmp.onUnregistered(clsLdr);
-    }
-
-    /**
-     * Checks if a nut with the same md5 ai already deployed with this SPI.
-     *
-     * @param md5 md5 of a new unit.
-     * @return {@code true} if this unit deployed, {@code false} otherwise.
-     */
-    private boolean unitDeployed(String md5) {
-        assert Thread.holdsLock(mux);
-
-        if (md5 != null) {
-            for (GridUriDeploymentUnitDescriptor d: unitLoaders)
-                if (md5.equals(d.getMd5()))
-                    return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Task deployment descriptor comparator.
-     * The greater descriptor is those one that has less timestamp.
-     */
-    private static class LastTimeUnitDescriptorComparator implements Comparator<GridUriDeploymentUnitDescriptor>,
-        Serializable {
-        /** */
-        private static final long serialVersionUID = 0L;
-
-        /** {@inheritDoc} */
-        @Override public int compare(GridUriDeploymentUnitDescriptor o1, GridUriDeploymentUnitDescriptor o2) {
-            if (o1.getTimestamp() < o2.getTimestamp())
-                return 1;
-
-            return o1.getTimestamp() == o2.getTimestamp() ? 0 : -1;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteSpiAdapter setName(String name) {
-        super.setName(name);
-
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(UriDeploymentSpi.class, this);
-    }
-
-    /**
-     * MBean implementation for UriDeploymentSpi.
-     */
-    private class UriDeploymentSpiMBeanImpl extends IgniteSpiMBeanAdapter implements UriDeploymentSpiMBean {
-        /** {@inheritDoc} */
-        UriDeploymentSpiMBeanImpl(IgniteSpiAdapter spiAdapter) {
-            super(spiAdapter);
-        }
-
-        /** {@inheritDoc} */
-        @Override public String getTemporaryDirectoryPath() {
-            return UriDeploymentSpi.this.getTemporaryDirectoryPath();
-        }
-
-        /** {@inheritDoc} */
-        @Override public List<String> getUriList() {
-            return UriDeploymentSpi.this.getUriList();
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean isCheckMd5() {
-            return UriDeploymentSpi.this.isCheckMd5();
-        }
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/UriDeploymentSpiMBean.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/UriDeploymentSpiMBean.java
deleted file mode 100644
index d1e599f1ee7..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/UriDeploymentSpiMBean.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.util.List;
-import org.apache.ignite.mxbean.MXBeanDescription;
-import org.apache.ignite.spi.IgniteSpiManagementMBean;
-
-/**
- * Management bean for {@link UriDeploymentSpi}.
- */
-@MXBeanDescription("MBean that provides access to URI deployment SPI configuration.")
-public interface UriDeploymentSpiMBean extends IgniteSpiManagementMBean {
-    /**
-     * Gets temporary directory path.
-     *
-     * @return Temporary directory path.
-     */
-    @MXBeanDescription("Temporary directory path.")
-    public String getTemporaryDirectoryPath();
-
-    /**
-     * Gets list of URIs that are processed by SPI.
-     *
-     * @return List of URIs.
-     */
-    @MXBeanDescription("List of URIs.")
-    public List<String> getUriList();
-
-    /**
-     * Indicates if this SPI should check new deployment units md5 for redundancy.
-     *
-     * @return if files are ckecked for redundancy.
-     */
-    @MXBeanDescription("Indicates if MD5 check is enabled.")
-    public boolean isCheckMd5();
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/package-info.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/package-info.java
deleted file mode 100644
index 67330563b4c..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Contains URI-based deployment SPI implementation.
- */
-
-package org.apache.ignite.spi.deployment.uri;
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/GridDeploymentFileHandler.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/GridDeploymentFileHandler.java
deleted file mode 100644
index 7ee6dc97f92..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/GridDeploymentFileHandler.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners;
-
-import java.io.File;
-
-/**
- * File handler interface. It somehow handles given file.
- */
-public interface GridDeploymentFileHandler {
-    /**
-     * Processes given file.
-     *
-     * @param file File to be handled.
-     */
-    public void handle(File file);
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/GridDeploymentFolderScannerHelper.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/GridDeploymentFolderScannerHelper.java
deleted file mode 100644
index 3dabc752996..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/GridDeploymentFolderScannerHelper.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners;
-
-import java.io.File;
-import java.io.FileFilter;
-
-/**
- * Helper class that recursively goes through the list of
- * files/directories and handles them by calling given handler.
- */
-public final class GridDeploymentFolderScannerHelper {
-    /**
-     * Enforces singleton.
-     */
-    private GridDeploymentFolderScannerHelper() {
-        // No-op.
-    }
-
-    /**
-     * Applies given file to the handler if it is not filtered out by given
-     * filter. If given file is not accepted by filter and it is a directory
-     * than recursively scans directory and apply the same method for every
-     * found file.
-     *
-     * @param file File that should be handled.
-     * @param filter File filter.
-     * @param handler Handler which should handle files.
-     */
-    public static void scanFolder(File file, FileFilter filter, GridDeploymentFileHandler handler) {
-        assert file != null;
-
-        if (filter.accept(file))
-            handler.handle(file);
-        else if (file.isDirectory()) {
-            for (File child : file.listFiles())
-                scanFolder(child, filter, handler);
-        }
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/GridUriDeploymentScannerListener.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/GridUriDeploymentScannerListener.java
deleted file mode 100644
index f815929b8ab..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/GridUriDeploymentScannerListener.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners;
-
-import java.io.File;
-import java.util.EventListener;
-import java.util.List;
-
-/**
- * Scanner listener interface. Whatever deployment scanner is used
- * (http, file and so on) following events happens:
- * <ul>
- * <li>{@code onNewOrUpdatedFile} - happens when new file has been found or updated.</li>
- * <li>{@code onDeletedFiles} - happens when file(s) has been removed.</li>
- * <li>{@code onFirstScanFinished} - happens when scanner completed its first scan.</li>
- * </ul>
- */
-public interface GridUriDeploymentScannerListener extends EventListener {
-    /**
-     * Notifies about new file or those one that was updated.
-     *
-     * @param file New or updated file.
-     * @param uri File URI.
-     * @param tstamp File modification date.
-     */
-    public void onNewOrUpdatedFile(File file, String uri, long tstamp);
-
-    /**
-     * Notifies about removed files.
-     *
-     * @param uris List of removed files.
-     */
-    public void onDeletedFiles(List<String> uris);
-
-    /**
-     * Notifies about first scan completion.
-     */
-    public void onFirstScanFinished();
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/UriDeploymentScanner.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/UriDeploymentScanner.java
deleted file mode 100644
index 3e1e608484b..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/UriDeploymentScanner.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners;
-
-import java.net.URI;
-
-/**
- * URI deployment scanner.
- */
-public interface UriDeploymentScanner {
-    /**
-     * Check whether scanner is able to process the given URI.
-     *
-     * @param uri URI.
-     * @return {@code true} if scanner is able to process the URI.
-     */
-    boolean acceptsURI(URI uri);
-
-    /**
-     * Scan the given URI.
-     *
-     * @param scanCtx Scan context.
-     */
-    void scan(UriDeploymentScannerContext scanCtx);
-
-    /**
-     * Gets default scan frequency in milliseconds.
-     *
-     * @return Default scan frequency.
-     */
-    long getDefaultScanFrequency();
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/UriDeploymentScannerContext.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/UriDeploymentScannerContext.java
deleted file mode 100644
index cd1870cbb92..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/UriDeploymentScannerContext.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.net.URI;
-import org.apache.ignite.IgniteLogger;
-
-/**
- * Deployment scanner context.
- */
-public interface UriDeploymentScannerContext {
-    /**
-     * Creates temp file in temp directory.
-     *
-     * @param fileName File name.
-     * @param tmpDir dir to creating file.
-     * @return created file.
-     * @throws IOException if error occur.
-     */
-    File createTempFile(String fileName, File tmpDir) throws IOException;
-
-    /**
-     * Gets temporary deployment directory.
-     *
-     * @return Temporary deployment directory.
-     */
-    File getDeployDirectory();
-
-    /**
-     * Gets filter for found files. Before listener is notified about
-     * changes with certain file last should be accepted by filter.
-     *
-     * @return New, updated or deleted file filter.
-     */
-    FilenameFilter getFilter();
-
-    /**
-     * Gets deployment listener.
-     *
-     * @return Listener which should be notified about all deployment events
-     *      by scanner.
-     */
-    GridUriDeploymentScannerListener getListener();
-
-    /**
-     * Gets scanner logger.
-     *
-     * @return Logger.
-     */
-    IgniteLogger getLogger();
-
-    /**
-     * Gets deployment URI.
-     *
-     * @return Deployment URI.
-     */
-    URI getUri();
-
-    /**
-     * Tests whether scanner was cancelled before or not.
-     *
-     * @return {@code true} if scanner was cancelled and {@code false}
-     *      otherwise.
-     */
-    boolean isCancelled();
-
-    /**
-     * Tests whether first scan completed or not.
-     *
-     * @return {@code true} if first scan has been already completed and
-     *      {@code false} otherwise.
-     */
-    boolean isFirstScan();
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/UriDeploymentScannerManager.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/UriDeploymentScannerManager.java
deleted file mode 100644
index d4155f1e4ba..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/UriDeploymentScannerManager.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.net.URI;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.internal.util.tostring.GridToStringExclude;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.IgniteSpiThread;
-
-/**
- * URI deployment scanner manager.
- */
-public class UriDeploymentScannerManager implements UriDeploymentScannerContext {
-    /** Ignite instance name. */
-    private final String igniteInstanceName;
-
-    /** URI that scanner should looks after. */
-    @GridToStringExclude
-    private final URI uri;
-
-    /** Temporary deployment directory. */
-    private final File deployDir;
-
-    /** Scan frequency. */
-    private final long freq;
-
-    /** Found files filter. */
-    private final FilenameFilter filter;
-
-    /** Scanner listener which should be notified about changes. */
-    private final GridUriDeploymentScannerListener lsnr;
-
-    /** Logger. */
-    private final IgniteLogger log;
-
-    /** Underlying scanner. */
-    private final UriDeploymentScanner scanner;
-
-    /** Scanner implementation. */
-    private IgniteSpiThread scannerThread;
-
-    /** Whether first scan completed or not. */
-    private boolean firstScan = true;
-
-    /**
-     * Creates new scanner.
-     *
-     * @param igniteInstanceName Ignite instance name.
-     * @param uri URI which scanner should looks after.
-     * @param deployDir Temporary deployment directory.
-     * @param freq Scan frequency.
-     * @param filter Found files filter.
-     * @param lsnr Scanner listener which should be notifier about changes.
-     * @param log Logger.
-     * @param scanner Scanner.
-     */
-    public UriDeploymentScannerManager(
-        String igniteInstanceName,
-        URI uri,
-        File deployDir,
-        long freq,
-        FilenameFilter filter,
-        GridUriDeploymentScannerListener lsnr,
-        IgniteLogger log,
-        UriDeploymentScanner scanner) {
-        assert uri != null;
-        assert freq > 0;
-        assert deployDir != null;
-        assert filter != null;
-        assert log != null;
-        assert lsnr != null;
-        assert scanner != null;
-
-        this.igniteInstanceName = igniteInstanceName;
-        this.uri = uri;
-        this.deployDir = deployDir;
-        this.freq = freq;
-        this.filter = filter;
-        this.log = log.getLogger(getClass());
-        this.lsnr = lsnr;
-        this.scanner = scanner;
-    }
-
-    /**
-     * Starts scanner.
-     */
-    public void start() {
-        scannerThread = new IgniteSpiThread(igniteInstanceName, "grid-uri-scanner", log) {
-            /** {@inheritDoc} */
-            @SuppressWarnings({"BusyWait"})
-            @Override protected void body() throws InterruptedException {
-                try {
-                    while (!isInterrupted()) {
-                        try {
-                            scanner.scan(UriDeploymentScannerManager.this);
-                        }
-                        catch (Exception e) {
-                            log.error("Uncaught error in URI deployment scanner", e);
-                        }
-                        finally {
-                            // Do it in finally to avoid any hanging.
-                            if (firstScan) {
-                                firstScan = false;
-
-                                lsnr.onFirstScanFinished();
-                            }
-                        }
-
-                        Thread.sleep(freq);
-                    }
-                }
-                finally {
-                    // Double check. If we were cancelled before anything has been scanned.
-                    if (firstScan) {
-                        firstScan = false;
-
-                        lsnr.onFirstScanFinished();
-                    }
-                }
-            }
-        };
-
-        scannerThread.start();
-
-        if (log.isDebugEnabled())
-            log.debug("Grid URI deployment scanner started: " + this);
-    }
-
-    /**
-     * Cancels scanner execution.
-     */
-    public void cancel() {
-        U.interrupt(scannerThread);
-    }
-
-    /**
-     * Joins scanner thread.
-     */
-    public void join() {
-        U.join(scannerThread, log);
-
-        if (log.isDebugEnabled())
-            log.debug("Grid URI deployment scanner stopped: " + this);
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isCancelled() {
-        assert scannerThread != null;
-
-        return scannerThread.isInterrupted();
-    }
-
-    /** {@inheritDoc} */
-    @Override public File createTempFile(String fileName, File tmpDir) throws IOException {
-        assert fileName != null;
-
-        int idx = fileName.lastIndexOf('.');
-
-        if (idx == -1)
-            idx = fileName.length();
-
-        String prefix = fileName.substring(0, idx);
-        if (idx < 3) { // Prefix must be at least 3 characters long. See File.createTempFile(...).
-            prefix += "___";
-        }
-
-        String suffix = fileName.substring(idx);
-
-        return File.createTempFile(prefix, suffix, tmpDir);
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isFirstScan() {
-        return firstScan;
-    }
-
-    /** {@inheritDoc} */
-    @Override public URI getUri() {
-        return uri;
-    }
-
-    /** {@inheritDoc} */
-    @Override public File getDeployDirectory() {
-        return deployDir;
-    }
-
-    /** {@inheritDoc} */
-    @Override public FilenameFilter getFilter() {
-        return filter;
-    }
-
-    /** {@inheritDoc} */
-    @Override public GridUriDeploymentScannerListener getListener() {
-        return lsnr;
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteLogger getLogger() {
-        return log;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(UriDeploymentScannerManager.class, this, "uri", U.hidePassword(uri.toString()));
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/file/UriDeploymentFileScanner.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/file/UriDeploymentFileScanner.java
deleted file mode 100644
index a908761aa3a..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/file/UriDeploymentFileScanner.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners.file;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import org.apache.ignite.internal.util.lang.GridTuple;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.IgniteSpiException;
-import org.apache.ignite.spi.deployment.uri.scanners.GridDeploymentFileHandler;
-import org.apache.ignite.spi.deployment.uri.scanners.GridDeploymentFolderScannerHelper;
-import org.apache.ignite.spi.deployment.uri.scanners.UriDeploymentScanner;
-import org.apache.ignite.spi.deployment.uri.scanners.UriDeploymentScannerContext;
-
-/**
- * URI deployment file scanner.
- */
-public class UriDeploymentFileScanner implements UriDeploymentScanner {
-    /** Default scan frequency. */
-    public static final int DFLT_SCAN_FREQ = 5000;
-
-    /** Per-URI contexts. */
-    private final ConcurrentHashMap<URI, URIContext> uriCtxs = new ConcurrentHashMap<>();
-
-    /** {@inheritDoc} */
-    @Override public boolean acceptsURI(URI uri) {
-        String proto = uri.getScheme().toLowerCase();
-
-        return "file".equals(proto);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void scan(UriDeploymentScannerContext scanCtx) {
-        URI uri = scanCtx.getUri();
-
-        URIContext uriCtx = uriCtxs.get(uri);
-
-        if (uriCtx == null) {
-            uriCtx = createUriContext(uri, scanCtx);
-
-            URIContext oldUriCtx = uriCtxs.putIfAbsent(uri, uriCtx);
-
-            if (oldUriCtx != null)
-                uriCtx = oldUriCtx;
-        }
-
-        uriCtx.scan(scanCtx);
-    }
-
-    /** {@inheritDoc} */
-    @Override public long getDefaultScanFrequency() {
-        return DFLT_SCAN_FREQ;
-    }
-
-    /**
-     * Create context for the given URI.
-     *
-     * @param uri URI.
-     * @param scanCtx Scanner context.
-     * @return URI context.
-     */
-    private URIContext createUriContext(URI uri, final UriDeploymentScannerContext scanCtx) {
-        String scanDirPath = uri.getPath();
-
-        File scanDir = null;
-
-        if (scanDirPath != null)
-            scanDir = new File(scanDirPath);
-
-        if (scanDir == null || !scanDir.isDirectory())
-            throw new IgniteSpiException("URI is either not provided or is not a directory: " +
-                U.hidePassword(uri.toString()));
-
-        FileFilter pkgFilter = new FileFilter() {
-            /** {@inheritDoc} */
-            @Override public boolean accept(File pathname) {
-                return scanCtx.getFilter().accept(null, pathname.getName());
-            }
-        };
-
-        FileFilter pkgDirFilesFilter = new FileFilter() {
-            /** {@inheritDoc} */
-            @Override public boolean accept(File pathname) {
-                // Allow all files in package.
-                return pathname.isFile();
-            }
-        };
-
-        return new URIContext(scanDir, pkgFilter, pkgDirFilesFilter);
-    }
-
-    /**
-     * Converts given file name to the URI with "file" scheme.
-     *
-     * @param name File name to be converted.
-     * @return File name with "file://" prefix.
-     */
-    private static String getFileUri(String name) {
-        assert name != null;
-
-        name = name.replace("\\", "/");
-
-        return "file://" + (name.charAt(0) == '/' ? "" : '/') + name;
-    }
-
-    /**
-     * Context for the given URI.
-     */
-    private static class URIContext {
-        /** Scanning directory or file. */
-        private final File scanDir;
-
-        /** Package filter. */
-        private final FileFilter pkgFilter;
-
-        /** Package directory files filter. */
-        private final FileFilter pkgDirFilesFilter;
-
-        /** Cache of found package files or directories to check if any of it has been updated. */
-        private final Map<File, Long> tstampCache = new HashMap<>();
-
-        /** Cache of found files in a package to check if any of it has been updated. */
-        private final Map<File, Map<File, Long>> pkgDirFilesTstampCache = new HashMap<>();
-
-        /**
-         * Constructor.
-         *
-         * @param scanDir Scan directory.
-         * @param pkgFilter Package file filter.
-         * @param pkgDirFilesFilter Package directory files filter.
-         */
-        private URIContext(File scanDir, FileFilter pkgFilter, FileFilter pkgDirFilesFilter) {
-            this.scanDir = scanDir;
-            this.pkgFilter = pkgFilter;
-            this.pkgDirFilesFilter = pkgDirFilesFilter;
-        }
-
-        /**
-         * Perform scan.
-         *
-         * @param scanCtx Scan context.
-         */
-        private void scan(final UriDeploymentScannerContext scanCtx) {
-            final Set<File> foundFiles = scanCtx.isFirstScan() ?
-                new HashSet<File>() : U.<File>newHashSet(tstampCache.size());
-
-            GridDeploymentFileHandler hnd = new GridDeploymentFileHandler() {
-                /** {@inheritDoc} */
-                @Override public void handle(File file) {
-                    foundFiles.add(file);
-
-                    handleFile(file, scanCtx);
-                }
-            };
-
-            // Scan directory for deploy units.
-            GridDeploymentFolderScannerHelper.scanFolder(scanDir, pkgFilter, hnd);
-
-            // Print warning if no packages found first time.
-            if (scanCtx.isFirstScan() && foundFiles.isEmpty())
-                U.warn(scanCtx.getLogger(), "No packages found in: " + U.hidePassword(scanCtx.getUri().toString()));
-
-            if (!scanCtx.isFirstScan()) {
-                Collection<File> deletedFiles = new HashSet<>(tstampCache.keySet());
-
-                deletedFiles.removeAll(foundFiles);
-
-                if (!deletedFiles.isEmpty()) {
-                    List<String> uris = new ArrayList<>();
-
-                    for (File file : deletedFiles) {
-                        uris.add(getFileUri(file.getAbsolutePath()));
-                    }
-
-                    // Clear cache.
-                    tstampCache.keySet().removeAll(deletedFiles);
-
-                    pkgDirFilesTstampCache.keySet().removeAll(deletedFiles);
-
-                    scanCtx.getListener().onDeletedFiles(uris);
-                }
-            }
-        }
-
-        /**
-         * Tests whether given directory or file was changed since last check and if so
-         * copies all directory sub-folders and files or file itself to the deployment
-         * directory and than notifies listener about new or updated files.
-         *
-         * @param file Scanning directory or file.
-         * @param ctx Scanner context.
-         */
-        private void handleFile(File file, UriDeploymentScannerContext ctx) {
-            boolean changed;
-
-            Long lastMod;
-
-            if (file.isDirectory()) {
-                GridTuple<Long> dirLastModified = F.t(file.lastModified());
-
-                changed = checkPackageDirectoryChanged(file, dirLastModified);
-
-                lastMod = dirLastModified.get();
-            }
-            else {
-                lastMod = tstampCache.get(file);
-
-                changed = lastMod == null || lastMod != file.lastModified();
-
-                lastMod = file.lastModified();
-            }
-
-            // If file is new or has been modified.
-            if (changed) {
-                tstampCache.put(file, lastMod);
-
-                if (ctx.getLogger().isDebugEnabled())
-                    ctx.getLogger().debug("Discovered deployment file or directory: " + file);
-
-                String fileName = file.getName();
-
-                try {
-                    File cpFile = ctx.createTempFile(fileName, ctx.getDeployDirectory());
-
-                    // Delete file when JVM stopped.
-                    cpFile.deleteOnExit();
-
-                    if (file.isDirectory()) {
-                        cpFile = new File(cpFile.getParent(), "dir_" + cpFile.getName());
-
-                        // Delete directory when JVM stopped.
-                        cpFile.deleteOnExit();
-                    }
-
-                    // Copy file to deploy directory.
-                    U.copy(file, cpFile, true);
-
-                    String fileUri = getFileUri(file.getAbsolutePath());
-
-                    assert lastMod != null;
-
-                    ctx.getListener().onNewOrUpdatedFile(cpFile, fileUri, lastMod);
-                }
-                catch (IOException e) {
-                    U.error(ctx.getLogger(), "Error saving file: " + fileName, e);
-                }
-            }
-        }
-
-        /**
-         * Tests whether certain directory was changed since given modification date.
-         * It scans all directory files one by one and compares their modification
-         * dates with those ones that was collected before.
-         * <p>
-         * If at least one file was changed (has modification date after given one)
-         * whole directory is considered as modified.
-         *
-         * @param dir Scanning directory.
-         * @param lastModified Last calculated Directory modification date.
-         * @return {@code true} if directory was changed since last check and
-         *      {@code false} otherwise.
-         */
-        @SuppressWarnings("ConstantConditions")
-        private boolean checkPackageDirectoryChanged(File dir, final GridTuple<Long> lastModified) {
-            final Map<File, Long> clssTstampCache;
-
-            boolean firstScan = false;
-
-            if (!pkgDirFilesTstampCache.containsKey(dir)) {
-                firstScan = true;
-
-                pkgDirFilesTstampCache.put(dir, clssTstampCache = new HashMap<>());
-            }
-            else
-                clssTstampCache = pkgDirFilesTstampCache.get(dir);
-
-            assert clssTstampCache != null;
-
-            final GridTuple<Boolean> changed = F.t(false);
-
-            final Set<File> foundFiles = firstScan ? new HashSet<File>() : U.<File>newHashSet(clssTstampCache.size());
-
-            GridDeploymentFileHandler hnd = new GridDeploymentFileHandler() {
-                @Override public void handle(File file) {
-                    foundFiles.add(file);
-
-                    Long fileLastModified = clssTstampCache.get(file);
-
-                    if (fileLastModified == null || fileLastModified != file.lastModified()) {
-                        clssTstampCache.put(file, fileLastModified = file.lastModified());
-
-                        changed.set(true);
-                    }
-
-                    // Calculate last modified file in folder.
-                    if (fileLastModified > lastModified.get())
-                        lastModified.set(fileLastModified);
-                }
-            };
-
-            // Scan package for changes.
-            GridDeploymentFolderScannerHelper.scanFolder(dir, pkgDirFilesFilter, hnd);
-
-            // Clear cache for deleted files.
-            if (!firstScan && clssTstampCache.keySet().retainAll(foundFiles))
-                changed.set(true);
-
-            return changed.get();
-        }
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/file/package-info.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/file/package-info.java
deleted file mode 100644
index 3096e41f696..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/file/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Contains directory scanner for URI deployer SPI.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners.file;
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/http/UriDeploymentHttpScanner.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/http/UriDeploymentHttpScanner.java
deleted file mode 100644
index bfb7a41994d..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/http/UriDeploymentHttpScanner.java
+++ /dev/null
@@ -1,507 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners.http;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.ConnectException;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.UnknownHostException;
-import java.security.KeyManagementException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import org.apache.ignite.internal.util.typedef.X;
-import org.apache.ignite.internal.util.typedef.internal.LT;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.IgniteSpiException;
-import org.apache.ignite.spi.deployment.uri.scanners.UriDeploymentScanner;
-import org.apache.ignite.spi.deployment.uri.scanners.UriDeploymentScannerContext;
-import org.jetbrains.annotations.Nullable;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.w3c.tidy.Tidy;
-
-/**
- * HTTP-based URI deployment scanner.
- * <p>
- * This scanner reads DOM of the HTML available via {@link UriDeploymentScannerContext#getUri()}
- * and parses out href attributes of all {@code &lt;a&gt;} tags -
- * they become the collection of URLs to GAR files that should be deployed.
- */
-public class UriDeploymentHttpScanner implements UriDeploymentScanner {
-    /** Default scan frequency. */
-    public static final int DFLT_SCAN_FREQ = 300000;
-
-    /** Secure socket protocol to use. */
-    private static final String PROTOCOL = "TLS";
-
-    /** Per-URI contexts. */
-    private final ConcurrentHashMap<URI, URIContext> uriCtxs = new ConcurrentHashMap<>();
-
-    /** {@inheritDoc} */
-    @Override public boolean acceptsURI(URI uri) {
-        String proto = uri.getScheme().toLowerCase();
-
-        return "http".equals(proto) || "https".equals(proto);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void scan(UriDeploymentScannerContext scanCtx) {
-        URI uri = scanCtx.getUri();
-
-        URIContext uriCtx = uriCtxs.get(uri);
-
-        if (uriCtx == null) {
-            uriCtx = createUriContext(uri, scanCtx);
-
-            URIContext oldUriCtx = uriCtxs.putIfAbsent(uri, uriCtx);
-
-            if (oldUriCtx != null)
-                uriCtx = oldUriCtx;
-        }
-
-        uriCtx.scan(scanCtx);
-    }
-
-    /**
-     * Create context for the given URI.
-     *
-     * @param uri URI.
-     * @param scanCtx Scanner context.
-     * @return URI context.
-     */
-    private URIContext createUriContext(URI uri, final UriDeploymentScannerContext scanCtx) {
-        assert "http".equals(uri.getScheme()) || "https".equals(uri.getScheme());
-
-        URL scanDir;
-
-        try {
-            scanDir = new URL(uri.getScheme(), uri.getHost(), uri.getPort(), uri.getPath());
-        }
-        catch (MalformedURLException e) {
-            throw new IgniteSpiException("Wrong value for scanned HTTP directory with URI: " + uri, e);
-        }
-
-        SSLSocketFactory sockFactory = null;
-
-        try {
-            if ("https".equals(uri.getScheme())) {
-                // Set up socket factory to do authentication.
-                SSLContext ctx = SSLContext.getInstance(PROTOCOL);
-
-                ctx.init(null, getTrustManagers(scanCtx), null);
-
-                sockFactory = ctx.getSocketFactory();
-            }
-        }
-        catch (NoSuchAlgorithmException e) {
-            throw new IgniteSpiException("Failed to initialize SSL context. URI: " + uri, e);
-        }
-        catch (KeyManagementException e) {
-            throw new IgniteSpiException("Failed to initialize SSL context. URI:" + uri, e);
-        }
-
-        return new URIContext(scanDir, sockFactory);
-    }
-
-    /** {@inheritDoc} */
-    @Override public long getDefaultScanFrequency() {
-        return DFLT_SCAN_FREQ;
-    }
-
-    /**
-     * Construct array with one trust manager which don't reject input certificates.
-     *
-     * @param scanCtx context.
-     * @return Array with one X509TrustManager implementation of trust manager.
-     */
-    private static TrustManager[] getTrustManagers(final UriDeploymentScannerContext scanCtx) {
-        return new TrustManager[]{
-            new X509TrustManager() {
-                /** {@inheritDoc} */
-                @Nullable @Override public X509Certificate[] getAcceptedIssuers() {
-                    return null;
-                }
-
-                /** {@inheritDoc} */
-                @Override public void checkClientTrusted(X509Certificate[] certs, String authType) {
-                    StringBuilder buf = new StringBuilder();
-
-                    buf.append("Trust manager handle client certificates [authType=");
-                    buf.append(authType);
-                    buf.append(", certificates=");
-
-                    for (X509Certificate cert : certs) {
-                        buf.append("{type=");
-                        buf.append(cert.getType());
-                        buf.append(", principalName=");
-                        buf.append(cert.getSubjectX500Principal().getName());
-                        buf.append('}');
-                    }
-
-                    buf.append(']');
-
-                    if (scanCtx.getLogger().isDebugEnabled())
-                        scanCtx.getLogger().debug(buf.toString());
-                }
-
-                /** {@inheritDoc} */
-                @Override public void checkServerTrusted(X509Certificate[] certs, String authType) {
-                    StringBuilder buf = new StringBuilder();
-
-                    buf.append("Trust manager handle server certificates [authType=");
-                    buf.append(authType);
-                    buf.append(", certificates=");
-
-                    for (X509Certificate cert : certs) {
-                        buf.append("{type=");
-                        buf.append(cert.getType());
-                        buf.append(", principalName=");
-                        buf.append(cert.getSubjectX500Principal().getName());
-                        buf.append('}');
-                    }
-
-                    buf.append(']');
-
-                    if (scanCtx.getLogger().isDebugEnabled())
-                        scanCtx.getLogger().debug(buf.toString());
-                }
-            }
-        };
-    }
-
-    /**
-     * URI context.
-     */
-    private class URIContext {
-        /** */
-        private final URL scanDir;
-
-        /** Outgoing data SSL socket factory. */
-        private final SSLSocketFactory sockFactory;
-
-        /** */
-        private final Tidy tidy;
-
-        /** Cache of found files to check if any of it has been updated. */
-        private final Map<String, Long> tstampCache = new HashMap<>();
-
-        /**
-         * Constructor.
-         *
-         * @param scanDir Scan directory.
-         * @param sockFactory Socket factory.
-         */
-        public URIContext(URL scanDir, SSLSocketFactory sockFactory) {
-            this.scanDir = scanDir;
-            this.sockFactory = sockFactory;
-
-            tidy = new Tidy();
-
-            tidy.setQuiet(true);
-            tidy.setOnlyErrors(true);
-            tidy.setShowWarnings(false);
-            tidy.setInputEncoding("UTF8");
-            tidy.setOutputEncoding("UTF8");
-        }
-
-        /**
-         * Perform scan.
-         *
-         * @param scanCtx Scan context.
-         */
-        private void scan(UriDeploymentScannerContext scanCtx) {
-            Collection<String> foundFiles = U.newHashSet(tstampCache.size());
-
-            long start = U.currentTimeMillis();
-
-            processHttp(foundFiles, scanCtx);
-
-            if (scanCtx.getLogger().isDebugEnabled())
-                scanCtx.getLogger().debug("HTTP scanner time in ms: " + (U.currentTimeMillis() - start));
-
-            if (!scanCtx.isFirstScan()) {
-                Collection<String> deletedFiles = new HashSet<>(tstampCache.keySet());
-
-                deletedFiles.removeAll(foundFiles);
-
-                if (!deletedFiles.isEmpty()) {
-                    List<String> uris = new ArrayList<>();
-
-                    for (String file : deletedFiles)
-                        uris.add(getFileUri(fileName(file), scanCtx));
-
-                    tstampCache.keySet().removeAll(deletedFiles);
-
-                    scanCtx.getListener().onDeletedFiles(uris);
-                }
-            }
-        }
-
-        /**
-         * @param files Files to process.
-         * @param scanCtx Scan context.
-         */
-        private void processHttp(Collection<String> files, UriDeploymentScannerContext scanCtx) {
-            Set<String> urls = getUrls(scanDir, scanCtx);
-
-            for (String url : urls) {
-                String fileName = fileName(url);
-
-                if (scanCtx.getFilter().accept(null, fileName)) {
-                    files.add(url);
-
-                    Long lastModified = tstampCache.get(url);
-
-                    InputStream in = null;
-                    OutputStream out = null;
-
-                    File file = null;
-
-                    try {
-                        URLConnection conn = new URL(url).openConnection();
-
-                        if (conn instanceof HttpsURLConnection) {
-                            HttpsURLConnection httpsConn = (HttpsURLConnection)conn;
-
-                            httpsConn.setHostnameVerifier(new DeploymentHostnameVerifier());
-
-                            assert sockFactory != null;
-
-                            // Initialize socket factory.
-                            httpsConn.setSSLSocketFactory(sockFactory);
-                        }
-
-                        if (lastModified != null)
-                            conn.setIfModifiedSince(lastModified);
-
-                        in = conn.getInputStream();
-
-                        long rcvLastModified = conn.getLastModified();
-
-                        if (in == null || lastModified != null && (lastModified == rcvLastModified ||
-                            conn instanceof HttpURLConnection &&
-                                ((HttpURLConnection)conn).getResponseCode() == HttpURLConnection.HTTP_NOT_MODIFIED))
-                            continue;
-
-                        tstampCache.put(url, rcvLastModified);
-
-                        lastModified = rcvLastModified;
-
-                        if (scanCtx.getLogger().isDebugEnabled()) {
-                            scanCtx.getLogger().debug("Discovered deployment file or directory: " +
-                                U.hidePassword(url));
-                        }
-
-                        file = scanCtx.createTempFile(fileName, scanCtx.getDeployDirectory());
-
-                        // Delete file when JVM stopped.
-                        file.deleteOnExit();
-
-                        out = new FileOutputStream(file);
-
-                        U.copy(in, out);
-                    }
-                    catch (IOException e) {
-                        if (!scanCtx.isCancelled()) {
-                            if (X.hasCause(e, ConnectException.class)) {
-                                LT.error(scanCtx.getLogger(), e, "Failed to connect to HTTP server " +
-                                    "(connection refused): " + U.hidePassword(url));
-                            }
-                            else if (X.hasCause(e, UnknownHostException.class)) {
-                                LT.error(scanCtx.getLogger(), e, "Failed to connect to HTTP server " +
-                                    "(host is unknown): " + U.hidePassword(url));
-                            }
-                            else
-                                U.error(scanCtx.getLogger(), "Failed to save file: " + fileName, e);
-                        }
-                    }
-                    finally {
-                        U.closeQuiet(in);
-                        U.closeQuiet(out);
-                    }
-
-                    if (file != null && file.exists() && file.length() > 0)
-                        scanCtx.getListener().onNewOrUpdatedFile(file, getFileUri(fileName, scanCtx), lastModified);
-                }
-            }
-        }
-
-        /**
-         * @param url Base URL.
-         * @param scanCtx Scan context.
-         * @return Set of referenced URLs in string format.
-         */
-        private Set<String> getUrls(URL url, UriDeploymentScannerContext scanCtx) {
-            assert url != null;
-
-            InputStream in = null;
-
-            Set<String> urls = new HashSet<>();
-
-            Document dom = null;
-
-            try {
-                URLConnection conn = url.openConnection();
-
-                if (conn instanceof HttpsURLConnection) {
-                    HttpsURLConnection httpsConn = (HttpsURLConnection)conn;
-
-                    httpsConn.setHostnameVerifier(new DeploymentHostnameVerifier());
-
-                    assert sockFactory != null;
-
-                    // Initialize socket factory.
-                    httpsConn.setSSLSocketFactory(sockFactory);
-                }
-
-                in = conn.getInputStream();
-
-                if (in == null)
-                    throw new IOException("Failed to open connection: " + U.hidePassword(url.toString()));
-
-                dom = tidy.parseDOM(in, null);
-            }
-            catch (IOException e) {
-                if (!scanCtx.isCancelled()) {
-                    if (X.hasCause(e, ConnectException.class)) {
-                        LT.error(scanCtx.getLogger(), e, "Failed to connect to HTTP server (connection refused): " +
-                            U.hidePassword(url.toString()));
-                    }
-                    else if (X.hasCause(e, UnknownHostException.class)) {
-                        LT.error(scanCtx.getLogger(), e, "Failed to connect to HTTP server (host is unknown): " +
-                            U.hidePassword(url.toString()));
-                    }
-                    else
-                        U.error(scanCtx.getLogger(), "Failed to get HTML page: " + U.hidePassword(url.toString()), e);
-                }
-            }
-            finally {
-                U.closeQuiet(in);
-            }
-
-            if (dom != null)
-                findReferences(dom, urls, url, scanCtx);
-
-            return urls;
-        }
-
-        /**
-         * @param node XML element node.
-         * @param res Set of URLs in string format to populate.
-         * @param baseUrl Base URL.
-         * @param scanCtx Scan context.
-         */
-        @SuppressWarnings( {"UnnecessaryFullyQualifiedName"})
-        private void findReferences(org.w3c.dom.Node node, Set<String> res, URL baseUrl,
-            UriDeploymentScannerContext scanCtx) {
-            if (node instanceof Element && "a".equals(node.getNodeName().toLowerCase())) {
-                Element element = (Element)node;
-
-                String href = element.getAttribute("href");
-
-                if (href != null && !href.isEmpty()) {
-                    URL url = null;
-
-                    try {
-                        url = new URL(href);
-                    }
-                    catch (MalformedURLException e) {
-                        try {
-                            url = new URL(baseUrl.getProtocol(), baseUrl.getHost(), baseUrl.getPort(),
-                                href.charAt(0) == '/' ? href : baseUrl.getFile() + '/' + href);
-                        }
-                        catch (MalformedURLException e1) {
-                            U.error(scanCtx.getLogger(), "Skipping bad URL: " + href, e1);
-                        }
-                    }
-
-                    if (url != null)
-                        res.add(url.toString());
-                }
-            }
-
-            NodeList childNodes = node.getChildNodes();
-
-            for (int i = 0; i < childNodes.getLength(); i++)
-                findReferences(childNodes.item(i), res, baseUrl, scanCtx);
-        }
-
-        /**
-         * @param url Base URL string format.
-         * @return File name extracted from {@code url} string format.
-         */
-        private String fileName(String url) {
-            assert url != null;
-
-            return url.substring(url.lastIndexOf('/') + 1);
-        }
-
-        /**
-         * Gets file URI for the given file name. It extends any given name with {@code URI}.
-         *
-         * @param name File name.
-         * @param scanCtx Scan context.
-         * @return URI for the given file name.
-         */
-        private String getFileUri(String name, UriDeploymentScannerContext scanCtx) {
-            assert name != null;
-
-            String fileUri = scanCtx.getUri().toString();
-
-            fileUri = fileUri.length() > 0 && fileUri.charAt(fileUri.length() - 1) == '/' ? fileUri + name :
-                fileUri + '/' + name;
-
-            return fileUri;
-        }
-    }
-
-    /**
-     * Verifier always return successful result for any host.
-     */
-    private static class DeploymentHostnameVerifier implements HostnameVerifier {
-        /** {@inheritDoc} */
-        @Override public boolean verify(String hostname, SSLSession ses) {
-            // Remote host trusted by default.
-            return true;
-        }
-    }
-}
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/http/package-info.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/http/package-info.java
deleted file mode 100644
index 041c1d440d0..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/http/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Contains HTTP scanner for URI deployer SPI.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners.http;
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/package-info.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/package-info.java
deleted file mode 100644
index bd7843ac736..00000000000
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Contains common classes for URI deployment scanners.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners;
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/internal/GridTaskUriDeploymentDeadlockSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/internal/GridTaskUriDeploymentDeadlockSelfTest.java
deleted file mode 100644
index c672a563946..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/internal/GridTaskUriDeploymentDeadlockSelfTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal;
-
-import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CountDownLatch;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.events.Event;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.lang.IgnitePredicate;
-import org.apache.ignite.spi.deployment.uri.UriDeploymentSpi;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.Test;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.apache.ignite.events.EventType.EVT_NODE_JOINED;
-
-/**
- * Test to reproduce gg-2852.
- */
-public class GridTaskUriDeploymentDeadlockSelfTest extends GridCommonAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
-
-        UriDeploymentSpi deploymentSpi = new UriDeploymentSpi();
-
-        deploymentSpi.setUriList(
-            Arrays.asList(U.resolveIgniteUrl("modules/extdata/uri/target/resources/").toURI().toString()));
-
-        if (igniteInstanceName.endsWith("2")) {
-            // Delay deployment for 2nd grid only.
-            Field f = deploymentSpi.getClass().getDeclaredField("delayOnNewOrUpdatedFile");
-
-            f.setAccessible(true);
-
-            f.set(deploymentSpi, true);
-        }
-
-        c.setDeploymentSpi(deploymentSpi);
-
-        return c;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testDeadlock() throws Exception {
-        try {
-            Ignite g = startGrid(1);
-
-            final CountDownLatch latch = new CountDownLatch(1);
-
-            g.events().localListen(new IgnitePredicate<Event>() {
-                @Override public boolean apply(Event evt) {
-                    assert evt.type() == EVT_NODE_JOINED;
-
-                    latch.countDown();
-
-                    return true;
-                }
-            }, EVT_NODE_JOINED);
-
-            IgniteInternalFuture<?> f = multithreadedAsync(new Callable<Object>() {
-                @Override public Object call() throws Exception {
-                    startGrid(2);
-
-                    return null;
-                }
-            }, 1);
-
-            assert latch.await(5, SECONDS);
-
-            info(">>> Starting task.");
-
-            assert "2".equals(executeAsync(compute(g.cluster().forPredicate(n -> n.equals(F.first(g.cluster().forRemotes().nodes())))),
-                "GarHelloWorldTask", "HELLOWORLD.MSG").get(60000));
-
-            f.get();
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/internal/UriDeploymentAbsentProcessorClassTest.java b/modules/urideploy/src/test/java/org/apache/ignite/internal/UriDeploymentAbsentProcessorClassTest.java
deleted file mode 100644
index a63946ae57a..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/internal/UriDeploymentAbsentProcessorClassTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal;
-
-import java.net.URL;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Collections;
-import javax.cache.processor.EntryProcessor;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.configuration.DeploymentMode;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerInaccessibleClassException;
-import org.apache.ignite.internal.util.typedef.X;
-import org.apache.ignite.spi.deployment.uri.UriDeploymentSpi;
-import org.apache.ignite.testframework.GridTestExternalClassLoader;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.Test;
-
-/** */
-public class UriDeploymentAbsentProcessorClassTest extends GridCommonAbstractTest {
-    /** */
-    private static final String RUN_CLS = "org.apache.ignite.tests.p2p.compute.ExternalEntryProcessor";
-
-    /** */
-    private Path file;
-
-    /** */
-    private Object retVal;
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        UriDeploymentSpi spi = new UriDeploymentSpi();
-
-        file = Files.createTempDirectory(getClass().getName());
-
-        spi.setUriList(Collections.singletonList(file.toUri().toString()));
-
-        return super.getConfiguration(igniteInstanceName)
-            .setPeerClassLoadingEnabled(false)
-            .setDeploymentSpi(spi)
-            .setDeploymentMode(DeploymentMode.SHARED);
-    }
-
-    /**
-     * Starts server node with URI deployment of empty directory.
-     * Starts client node.
-     * In a separate thread, load entry processor from p2p class loader.
-     * Try to invoke it on server node, catch expected exception.
-     * Check that server node is operational after.
-     *
-     * @throws Exception if failed.
-     */
-    @Test
-    public void test() throws Exception {
-        try {
-            startGrid(1);
-
-            final Ignite ignite2 = startClientGrid(2);
-
-            Thread thread = new Thread(() -> {
-                try {
-                    ClassLoader cl = new GridTestExternalClassLoader(new URL[] {
-                        new URL(GridTestProperties.getProperty("p2p.uri.cls")) });
-
-                    Thread.currentThread().setContextClassLoader(cl);
-
-                    Class cls = cl.loadClass(RUN_CLS);
-
-                    EntryProcessor proc = (EntryProcessor)cls.newInstance();
-
-                    retVal = ignite2.getOrCreateCache(DEFAULT_CACHE_NAME).invoke(0, proc);
-                }
-                catch (Exception ex) {
-                    if (X.hasCause(ex, "Failed to find class with given class loader for unmarshalling",
-                        OptimizedMarshallerInaccessibleClassException.class)) {
-                        ignite2.log().warning("Caught expected exception", ex);
-
-                        retVal = 0;
-                    }
-                    else
-                        throw new RuntimeException(ex);
-                }
-            });
-
-            thread.start();
-
-            thread.join();
-
-            assertEquals(0, retVal);
-
-            assertEquals(0, grid(1).cache(DEFAULT_CACHE_NAME).size());
-        }
-        finally {
-            stopAllGrids();
-
-            if (file != null)
-                file.toFile().delete();
-        }
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/p2p/GridP2PDisabledSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/p2p/GridP2PDisabledSelfTest.java
deleted file mode 100644
index 08a2b928114..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/p2p/GridP2PDisabledSelfTest.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.p2p;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.UUID;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.configuration.DeploymentMode;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.deployment.uri.UriDeploymentSpi;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.apache.ignite.testframework.junits.common.GridCommonTest;
-import org.junit.Test;
-
-/**
- * Test what happens if peer class loading is disabled.
- * <p>
- * In order for this test to run, make sure that your
- * {@code p2p.uri.cls} folder ends with {@code .gar} extension.
- */
-@SuppressWarnings({"ProhibitedExceptionDeclared"})
-@GridCommonTest(group = "P2P")
-public class GridP2PDisabledSelfTest extends GridCommonAbstractTest {
-    /** Task name. */
-    private static final String TASK_NAME = "org.apache.ignite.tests.p2p.P2PTestTaskExternalPath1";
-
-    /** External class loader. */
-    private static ClassLoader extLdr;
-
-    /** Current deployment mode. Used in {@link #getConfiguration(String)}. */
-    private DeploymentMode depMode;
-
-    /** */
-    private boolean initGar;
-
-    /** Path to GAR file. */
-    private String garFile;
-
-    /**
-     *
-     */
-    public GridP2PDisabledSelfTest() {
-        super(/*start grid*/false);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        extLdr = getExternalClassLoader();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        cfg.setPeerClassLoadingEnabled(false);
-
-        cfg.setDeploymentMode(depMode);
-
-        if (initGar) {
-            UriDeploymentSpi depSpi = new UriDeploymentSpi();
-
-            depSpi.setUriList(Collections.singletonList(garFile));
-
-            cfg.setDeploymentSpi(depSpi);
-        }
-
-        cfg.setMetricsUpdateFrequency(500);
-
-        return cfg;
-    }
-
-    /**
-     * Test what happens if peer class loading is disabled.
-     *
-     * @throws Exception if error occur.
-     */
-    @SuppressWarnings("unchecked")
-    private void checkClassNotFound() throws Exception {
-        initGar = false;
-
-        try {
-            Ignite ignite1 = startGrid(1);
-            Ignite ignite2 = startGrid(2);
-
-            Class task = extLdr.loadClass(TASK_NAME);
-
-            try {
-                ignite1.compute().execute(task, ignite2.cluster().localNode().id());
-
-                assert false;
-            }
-            catch (IgniteException e) {
-                info("Received expected exception: " + e);
-            }
-        }
-        finally {
-            stopGrid(1);
-            stopGrid(2);
-        }
-    }
-
-    /**
-     * @throws Exception if error occur.
-     */
-    private void checkGar() throws Exception {
-        initGar = true;
-
-        String garDir = "modules/extdata/p2p/target/deploy";
-        String garFileName = "p2p.gar";
-
-        File origGarPath = U.resolveIgnitePath(garDir + '/' + garFileName);
-
-        File tmpPath = new File(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString());
-
-        if (!tmpPath.mkdir())
-            throw new IOException("Can not create temp directory");
-
-        try {
-            File newGarFile = new File(tmpPath, garFileName);
-
-            U.copy(origGarPath, newGarFile, false);
-
-            assert newGarFile.exists();
-
-            try {
-                garFile = "file:///" + tmpPath.getAbsolutePath();
-
-                try {
-                    Ignite ignite1 = startGrid(1);
-                    Ignite ignite2 = startGrid(2);
-
-                    Integer res = ignite1.compute().<UUID, Integer>execute(TASK_NAME, ignite2.cluster().localNode().id());
-
-                    assert res != null;
-                }
-                finally {
-                    stopGrid(1);
-                    stopGrid(2);
-                }
-            }
-            finally {
-                if (newGarFile != null && !newGarFile.delete())
-                    error("Can not delete temp gar file");
-            }
-        }
-        finally {
-            if (!tmpPath.delete())
-                error("Can not delete temp directory");
-        }
-    }
-
-    /**
-     * Test GridDeploymentMode.ISOLATED mode.
-     *
-     * @throws Exception if error occur.
-     */
-    @Test
-    public void testGarPrivateMode() throws Exception {
-        depMode = DeploymentMode.PRIVATE;
-
-        checkGar();
-    }
-
-    /**
-     * Test GridDeploymentMode.ISOLATED mode.
-     *
-     * @throws Exception if error occur.
-     */
-    @Test
-    public void testGarIsolatedMode() throws Exception {
-        depMode = DeploymentMode.ISOLATED;
-
-        checkGar();
-    }
-
-    /**
-     * Test GridDeploymentMode.CONTINUOUS mode.
-     *
-     * @throws Exception if error occur.
-     */
-    @Test
-    public void testGarContinuousMode() throws Exception {
-        depMode = DeploymentMode.CONTINUOUS;
-
-        checkGar();
-    }
-
-    /**
-     * Test GridDeploymentMode.SHARED mode.
-     *
-     * @throws Exception if error occur.
-     */
-    @Test
-    public void testGarSharedMode() throws Exception {
-        depMode = DeploymentMode.SHARED;
-
-        checkGar();
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentAbstractSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentAbstractSelfTest.java
deleted file mode 100644
index 603297785a9..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentAbstractSelfTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.util.lang.GridAbsPredicateX;
-import org.apache.ignite.spi.deployment.DeploymentListener;
-import org.apache.ignite.spi.deployment.DeploymentResource;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.spi.GridSpiAbstractTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTestConfig;
-
-/**
- *
- */
-public abstract class GridUriDeploymentAbstractSelfTest extends GridSpiAbstractTest<UriDeploymentSpi> {
-    /** {@inheritDoc} */
-    @Override protected void afterTestsStopped() throws Exception {
-        getSpi().setListener(null);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        getSpi().setListener(new DeploymentListener() {
-            @Override public void onUnregistered(ClassLoader ldr) {
-                // No-op.
-            }
-        });
-    }
-
-    /**
-     * @return Temporary directory to be used in test.
-     */
-    @GridSpiTestConfig
-    public String getTemporaryDirectoryPath() {
-        String path = GridTestProperties.getProperty("deploy.uri.tmpdir");
-
-        assert path != null;
-
-        return path;
-    }
-
-    /**
-     * @param taskName Name of available task.
-     * @throws Exception if failed.
-     */
-    protected void checkTask(String taskName) throws Exception {
-        assert taskName != null;
-
-        DeploymentResource task = getSpi().findResource(taskName);
-
-        assert task != null;
-
-        info("Deployed task [task=" + task + ']');
-    }
-
-    /**
-     * @param taskName name of unavailable task.
-     * @throws Exception if failed.
-     */
-    protected void checkNoTask(String taskName) throws Exception {
-        assert taskName != null;
-
-        DeploymentResource task = getSpi().findResource(taskName);
-
-        assert task == null;
-
-        info("Not deployed task [task=" + task + ']');
-    }
-
-    /**
-     * @param taskName name of task to wait on.
-     * @param expectDeployed if {@code true}, wait for availability, else wait for unavailability.
-     * @param timeout in ms.
-     * @throws Exception if failed.
-     */
-    protected void waitForTask(String taskName, boolean expectDeployed, long timeout) throws IgniteCheckedException {
-        assertTrue("Failed to wait for (un)deployment of " + taskName,
-            GridTestUtils.waitForCondition(new GridAbsPredicateX() {
-                @Override public boolean applyx() throws IgniteCheckedException {
-                    if (expectDeployed)
-                        return getSpi().findResource(taskName) != null;
-                    else
-                        return getSpi().findResource(taskName) == null;
-                }
-            }, timeout));
-
-        info((expectDeployed ? "Deployed" : "Not deployed") + " task [task=" + taskName + ']');
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassLoaderMultiThreadedSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassLoaderMultiThreadedSelfTest.java
deleted file mode 100644
index 4ea79908b17..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassLoaderMultiThreadedSelfTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.net.URL;
-import java.util.concurrent.Callable;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.jetbrains.annotations.Nullable;
-import org.junit.Test;
-
-/**
- * Grid URI deployment class loader self test.
- */
-public class GridUriDeploymentClassLoaderMultiThreadedSelfTest extends GridCommonAbstractTest {
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testMultiThreadedClassLoading() throws Exception {
-        for (int i = 0; i < 50; i++)
-            doTest();
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    private void doTest() throws Exception {
-        final GridUriDeploymentClassLoader ldr = new GridUriDeploymentClassLoader(
-            new URL[] { U.resolveIgniteUrl(GridTestProperties.getProperty("ant.urideployment.gar.file")) },
-                getClass().getClassLoader());
-
-        multithreaded(
-            new Callable<Object>() {
-                @Nullable @Override public Object call() throws Exception {
-                    ldr.loadClass("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask0");
-
-                    return null;
-                }
-            },
-            500
-        );
-
-        final GridUriDeploymentClassLoader ldr0 = new GridUriDeploymentClassLoader(
-            new URL[] { U.resolveIgniteUrl(GridTestProperties.getProperty("ant.urideployment.gar.file")) },
-            getClass().getClassLoader());
-
-        multithreaded(
-            new Callable<Object>() {
-                @Nullable @Override public Object call() throws Exception {
-                    ldr0.loadClassIsolated("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask0");
-
-                    return null;
-                }
-            },
-            500
-        );
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassLoaderSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassLoaderSelfTest.java
deleted file mode 100644
index 522bc60c716..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassLoaderSelfTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.net.URL;
-import java.util.Collections;
-import java.util.List;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.deployment.DeploymentResource;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.spi.GridSpiTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTestConfig;
-import org.junit.Test;
-
-/**
- * Grid URI deployment class loader test.
- */
-@GridSpiTest(spi = UriDeploymentSpi.class, group = "Deployment SPI")
-public class GridUriDeploymentClassLoaderSelfTest extends GridUriDeploymentAbstractSelfTest {
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testNestedJarClassloading() throws Exception {
-        ClassLoader ldr = getGarClassLoader();
-
-        // Load class from nested JAR file
-        assert ldr.loadClass("javax.mail.Service") != null;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testClasspathResourceLoading() throws Exception {
-        ClassLoader ldr = getGarClassLoader();
-
-        // Get resource from GAR file
-        URL rsrcUrl = ldr.getResource("org/apache/ignite/test/test.properties");
-
-        assert rsrcUrl != null;
-    }
-
-    /**
-     * @return Test GAR's class loader
-     * @throws Exception if test GAR wasn't deployed
-     */
-    private ClassLoader getGarClassLoader() throws Exception {
-        DeploymentResource task = getSpi().findResource("GridUriDeploymentTestWithNameTask7");
-
-        assert task != null;
-
-        return task.getClassLoader();
-    }
-
-    /**
-     * @return List of URIs to use in this test.
-     */
-    @GridSpiTestConfig
-    public List<String> getUriList() {
-        return Collections.singletonList(GridTestProperties.getProperty("ant.urideployment.gar.uri").
-            replace("EXTDATA", U.resolveIgnitePath("modules/extdata").getAbsolutePath()));
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassloaderRegisterSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassloaderRegisterSelfTest.java
deleted file mode 100644
index bc79242b105..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentClassloaderRegisterSelfTest.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.apache.ignite.compute.ComputeJob;
-import org.apache.ignite.compute.ComputeJobResult;
-import org.apache.ignite.compute.ComputeTask;
-import org.apache.ignite.compute.ComputeTaskSplitAdapter;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.deployment.DeploymentListener;
-import org.apache.ignite.spi.deployment.DeploymentResource;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.spi.GridSpiAbstractTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTestConfig;
-import org.junit.Test;
-
-/**
- * Test for classloader registering.
- */
-@GridSpiTest(spi = UriDeploymentSpi.class, group = "Deployment SPI")
-public class GridUriDeploymentClassloaderRegisterSelfTest extends GridSpiAbstractTest<UriDeploymentSpi> {
-    /** */
-    private static Map<ClassLoader, Set<Class<? extends ComputeTask<?, ?>>>> tasks =
-        Collections.synchronizedMap(new HashMap<ClassLoader, Set<Class<? extends ComputeTask<?, ?>>>>());
-
-    /** {@inheritDoc} */
-    @Override protected void afterTestsStopped() throws Exception {
-        getSpi().setListener(null);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        getSpi().setListener(new DeploymentListener() {
-            @Override public void onUnregistered(ClassLoader ldr) {
-                tasks.remove(ldr);
-            }
-        });
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        tasks.clear();
-    }
-
-    /**
-     * @param taskCls Class to be deployed.
-     * @throws Exception if deployment failed.
-     */
-    private void deploy(Class<? extends ComputeTask<?, ?>> taskCls) throws Exception {
-        getSpi().register(taskCls.getClassLoader(), taskCls);
-
-        Set<Class<? extends ComputeTask<?, ?>>> clss = new HashSet<>(1);
-
-        clss.add(taskCls);
-
-        tasks.put(taskCls.getClassLoader(), clss);
-    }
-
-    /**
-     * @param taskCls Unavailable task class.
-     */
-    private void checkUndeployed(Class<? extends ComputeTask<?, ?>> taskCls) {
-        assert !tasks.containsKey(taskCls.getClassLoader());
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testDeploy() throws Exception {
-        Class<? extends ComputeTask<?, ?>> task = GridFileDeploymentTestTask.class;
-
-        deploy(task);
-
-        DeploymentResource t1 = getSpi().findResource(task.getName());
-
-        assert t1 != null;
-
-        DeploymentResource t2 = getSpi().findResource(task.getName());
-
-        assert t1.equals(t2);
-        assert t1.getResourceClass() == t2.getResourceClass();
-
-        getSpi().unregister(task.getName());
-
-        checkUndeployed(task);
-
-        assert getSpi().findResource(task.getName()) == null;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testRedeploy() throws Exception {
-        // Test non-versioned redeploy.
-        Class<? extends ComputeTask<?, ?>> t1 = GridFileDeploymentTestTask.class;
-
-        deploy(t1);
-
-        Class<? extends ComputeTask<?, ?>> t2 = GridFileDeploymentTestTask.class;
-
-        deploy(t2);
-
-        getSpi().unregister(t1.getName());
-
-        checkUndeployed(t1);
-        checkUndeployed(t2);
-    }
-
-    /**
-     * @return List of URIs to use in this test.
-     */
-    @GridSpiTestConfig
-    public List<String> getUriList() {
-        // No real gar file is required. Add one just to avoid failure because of missed to default directory.
-        return Collections.singletonList(GridTestProperties.getProperty("ant.urideployment.gar.uri").
-            replace("EXTDATA", U.resolveIgnitePath("modules/extdata").getAbsolutePath()));
-    }
-
-    /**
-     * Do nothing task for test.
-     */
-    private static class GridFileDeploymentTestTask extends ComputeTaskSplitAdapter<Object, Object> {
-        /** {@inheritDoc} */
-        @Override protected Collection<? extends ComputeJob> split(int gridSize, Object arg) {
-            return null;
-        }
-
-        /** {@inheritDoc} */
-        @Override public Serializable reduce(List<ComputeJobResult> results) {
-            return null;
-        }
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentConfigSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentConfigSelfTest.java
deleted file mode 100644
index f2a5d4c53fa..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentConfigSelfTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.File;
-import java.util.Collections;
-
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.spi.GridSpiAbstractConfigTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTest;
-import org.junit.Test;
-
-/**
- *
- */
-@GridSpiTest(spi = UriDeploymentSpi.class, group = "Deployment SPI")
-public class GridUriDeploymentConfigSelfTest extends GridSpiAbstractConfigTest<UriDeploymentSpi> {
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testNegativeConfig() throws Exception {
-        checkNegativeSpiProperty(new UriDeploymentSpi(), "uriList", null);
-        checkNegativeSpiProperty(new UriDeploymentSpi(), "uriList", Collections.singletonList("qwertyuiop"), false);
-        checkNegativeSpiProperty(new UriDeploymentSpi(), "uriList", Collections.singletonList(null), false);
-    }
-
-    /**
-     * Verifies that mixing LocalDeploymentSpi and UriDeploymentSpi doesn't violate configuration consistency rules.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testClientSpiConsistencyChecked() throws Exception {
-        String srvName = "server";
-        String clientName = "client";
-
-        IgniteConfiguration srvCfg = getConfiguration();
-
-        UriDeploymentSpi deploymentSpi = new UriDeploymentSpi();
-        String tmpDir = GridTestProperties.getProperty("deploy.uri.tmpdir");
-        File tmp = new File(tmpDir);
-
-        if (!tmp.exists())
-            tmp.mkdir();
-
-        deploymentSpi.setUriList(Collections.singletonList("file://" + tmpDir));
-        srvCfg.setDeploymentSpi(deploymentSpi);
-
-        try {
-            startGrid(srvName, srvCfg);
-
-            IgniteConfiguration clientCfg = getConfiguration();
-            startClientGrid(clientName, clientCfg);
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentFileProcessorSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentFileProcessorSelfTest.java
deleted file mode 100644
index e36d81a0f2e..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentFileProcessorSelfTest.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.spi.GridSpiTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTestConfig;
-import org.apache.ignite.util.antgar.IgniteDeploymentGarAntTask;
-import org.apache.tools.ant.Project;
-import org.junit.Test;
-
-/**
- *
- */
-@GridSpiTest(spi = UriDeploymentSpi.class, group = "Deployment SPI")
-public class GridUriDeploymentFileProcessorSelfTest extends GridUriDeploymentAbstractSelfTest {
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testTaskCorrect() throws Exception {
-        proceedTest("correct.gar", "ignite.xml",
-            "org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask0", true);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testTaskWithBrokenXML() throws Exception {
-        proceedTest("broken.gar", "ignite.brokenxml", "brokenxml-task", false);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testTaskWithEmptyXML() throws Exception {
-        proceedTest("empty.gar", "ignite.empty", "emptyxml-task", false);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testTaskWithIncorrectRefsXML() throws Exception {
-        proceedTest("incorrefs.gar", "ignite.incorrefs", "incorrectref-task", false);
-    }
-
-    /**
-     * @param garFileName Name of .gar file.
-     * @param garDescFileName Name of Ignite descriptor file.
-     * @param taskId Task id.
-     * @param deployed If {@code true} then givent task should be deployed after test,
-     *      if {@code false} then it should be undeployed.
-     * @throws Exception If failed.
-     */
-    private void proceedTest(String garFileName, String garDescFileName, final String taskId, final boolean deployed)
-        throws Exception {
-        info("This test checks broken tasks. All exceptions that might happen are the part of the test.");
-
-        String tmpDirName = GridTestProperties.getProperty("ant.gar.tmpdir");
-        String srcDirName = GridTestProperties.getProperty("ant.gar.srcdir");
-        String baseDirName = tmpDirName + File.separator + System.currentTimeMillis();
-        String metaDirName = baseDirName + File.separator + "META-INF";
-        String garDescDirName =
-            U.resolveIgnitePath(GridTestProperties.getProperty("deploy.gar.descriptor.dir")) +
-            File.separator + garDescFileName;
-
-        // Make base, META-INF and deployment dirs.
-        File destDir = new File(GridTestProperties.getProperty("deploy.uri.file2.path"));
-
-        if (!destDir.exists()) {
-            boolean mkdir = destDir.mkdirs();
-
-            assert mkdir;
-        }
-
-        boolean mkdir = new File(baseDirName).mkdirs();
-
-        assert mkdir;
-
-        mkdir = new File(metaDirName).mkdirs();
-
-        assert mkdir;
-
-        // Make Gar file
-        U.copy( new File(garDescDirName), new File(metaDirName + File.separator + "ignite.xml"), true);
-
-        // Copy files to basedir
-        U.copy(new File(srcDirName), new File(baseDirName), true);
-
-        File garFile = new File(baseDirName + File.separator + garFileName);
-
-        IgniteDeploymentGarAntTask garTask = new IgniteDeploymentGarAntTask();
-
-        Project garProject = new Project();
-
-        garProject.setName("Gar test project");
-
-        garTask.setDestFile(garFile);
-        garTask.setBasedir(new File(baseDirName));
-        garTask.setProject(garProject);
-
-        garTask.execute();
-
-        assert garFile.exists();
-
-        // Copy to deployment directory.
-        U.copy(garFile, destDir, true);
-
-        try {
-            // Wait for SPI
-            waitForTask(taskId, deployed, 5000);
-
-            if (deployed)
-                assert getSpi().findResource(taskId) != null;
-            else
-                assert getSpi().findResource(taskId) == null;
-        }
-        finally {
-            U.delete(destDir);
-
-            // Wait for SPI refresh
-            Thread.sleep(1000);
-        }
-    }
-
-    /**
-     * @return List of URI to be used as deployment source.
-     */
-    @GridSpiTestConfig
-    public List<String> getUriList() {
-        File destDir = new File(GridTestProperties.getProperty("deploy.uri.file2.path"));
-
-        if (!destDir.exists()) {
-            boolean mkdir = destDir.mkdirs();
-
-            assert mkdir;
-        }
-
-        List<String> uriList = new ArrayList<>();
-
-        uriList.add(GridTestProperties.getProperty("deploy.uri.file2"));
-
-        return uriList;
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentMd5CheckSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentMd5CheckSelfTest.java
deleted file mode 100644
index 5a658e47de8..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentMd5CheckSelfTest.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.deployment.DeploymentListener;
-import org.apache.ignite.spi.deployment.DeploymentResource;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.spi.GridSpiTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTestConfig;
-import org.junit.Test;
-
-/**
- * Redundancy for URI deployment test
- */
-@GridSpiTest(spi = UriDeploymentSpi.class, group = "Deployment SPI")
-public class GridUriDeploymentMd5CheckSelfTest extends GridUriDeploymentAbstractSelfTest {
-    /**
-     * Used to count number of unit undeployments.
-     */
-    private AtomicInteger undeployCntr = new AtomicInteger();
-
-    /**
-     * Test skipping fresh deployment of duplicated .gar files.
-     *
-     * @throws Exception if failed.
-     */
-    @Test
-    public void testMd5FileCheck() throws Exception {
-        undeployCntr.set(0);
-
-        String taskName = "GridUriDeploymentTestWithNameTask7";
-
-        DeploymentResource task = getSpi().findResource(taskName);
-
-        assert task == null;
-
-        atomicCopy(getGarFile(), getDeployDir(), "uri1.gar");
-
-        waitForTask(taskName, true, 10000);
-
-        assert undeployCntr.get() == 0;
-
-        atomicCopy(getGarFile(), getDeployDir(), "uri2.gar");
-
-        waitForTask(taskName, true, 10000);
-
-        assert undeployCntr.get() == 0;
-    }
-
-    /**
-     * Test skipping fresh deployment of .gar directories with equal content.
-     *
-     * @throws Exception if failed.
-     */
-    @Test
-    public void testMd5DirectoryCheck() throws Exception {
-        undeployCntr.set(0);
-
-        String taskName = "GridUriDeploymentTestWithNameTask6";
-
-        DeploymentResource task = getSpi().findResource(taskName);
-
-        assert task == null;
-
-        atomicCopy(getGarDir(), getDeployDir(), "uri1.gar");
-
-        waitForTask(taskName, true, 10000);
-
-        assert undeployCntr.get() == 0;
-
-        atomicCopy(getGarDir(), getDeployDir(), "uri2.gar");
-
-        waitForTask(taskName, true, 10000);
-
-        assert undeployCntr.get() == 0;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTest() throws Exception {
-        U.delete(getGarDir());
-        U.delete(new File(getDeployDir(), "uri1.gar"));
-        U.delete(new File(getDeployDir(), "uri2.gar"));
-
-        Thread.sleep(500);
-    }
-
-    /**
-     * First copies to parent directory, when moves atomically to destination directory.
-     */
-    private static void atomicCopy(File src, File destDir, String fileName) throws IOException {
-        File destParent = new File(destDir.getParent(), fileName);
-
-        U.copy(src, destParent, true);
-
-        destParent.renameTo(new File(destDir, fileName));
-    }
-
-    /**
-     * Prepares and returns a directory for test deployments.
-     *
-     * @return directory used as deployment source in this test.
-     */
-    private File getDeployDir() {
-        File tmpDir = new File(GridTestProperties.getProperty("deploy.uri.file2.path"));
-
-        if (!tmpDir.exists())
-            tmpDir.mkdirs();
-
-        assert tmpDir.isDirectory();
-
-        return tmpDir;
-    }
-
-    /**
-     * Returns original .gar file to use in this test.
-     *
-     * @return a valid .gar file path.
-     */
-    private File getGarFile() {
-        File gar = U.resolveIgnitePath(GridTestProperties.getProperty("ant.urideployment.gar.file"));
-
-        assert gar.isFile();
-
-        return gar;
-    }
-
-    /**
-     * Prepares and returns .gar directory to use in this test.
-     *
-     * @return a valid .gar directory.
-     * @throws IOException if such directory can't be created.
-     */
-    private File getGarDir() throws IOException {
-        File file = getGarFile();
-        File parent = file.getParentFile();
-
-        assert parent.isDirectory();
-
-        File garDir = new File(parent, "extracted_" + file.getName());
-
-        // If content wasn't extracted before
-        if (!garDir.isDirectory()) {
-            garDir.mkdirs();
-            U.unzip(file, garDir, null);
-        }
-
-        return garDir;
-    }
-
-    /**
-     * @return List of URI to use as deployment source.
-     */
-    @GridSpiTestConfig
-    public List<String> getUriList() {
-        getDeployDir(); // Force creation.
-        return Collections.singletonList(GridTestProperties.getProperty("deploy.uri.file2"));
-    }
-
-    /**
-     * @return {@code true}
-     */
-    @GridSpiTestConfig
-    public boolean getCheckMd5() {
-        return true;
-    }
-
-    /**
-     * Sets listener to increment {@code undeployCounter}
-     *
-     * @throws Exception if failed.
-     */
-    @Override protected void beforeTestsStarted() throws Exception {
-        getSpi().setListener(new DeploymentListener() {
-            @Override public void onUnregistered(ClassLoader ldr) {
-                undeployCntr.incrementAndGet();
-            }
-        });
-    }
-
-    /**
-     * Cleans temporary deployment directory.
-     *
-     * @throws Exception if cleanup failed.
-     */
-    @Override protected void afterTestsStopped() throws Exception {
-        U.delete(getDeployDir());
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentMultiScannersErrorThrottlingTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentMultiScannersErrorThrottlingTest.java
deleted file mode 100644
index 5e4a4c108b5..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentMultiScannersErrorThrottlingTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.internal.util.typedef.internal.LT;
-import org.apache.ignite.testframework.junits.spi.GridSpiTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTestConfig;
-import org.junit.Test;
-
-/**
- * Tests error and warn messages throttling.
- */
-@GridSpiTest(spi = UriDeploymentSpi.class, group = "Deployment SPI")
-public class GridUriDeploymentMultiScannersErrorThrottlingTest extends GridUriDeploymentAbstractSelfTest {
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testThrottling() throws Exception {
-        LT.throttleTimeout(11000);
-
-        Thread.sleep(15 * 1000);
-    }
-
-    /**
-     * @return URI list.
-     */
-    @GridSpiTestConfig
-    public List<String> getUriList() {
-        List<String> uriList = new ArrayList<>();
-
-        uriList.add("http://freq=5000@localhost/tasks");
-        uriList.add("http://freq=5000@unknownhost.host/tasks");
-
-        return uriList;
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentMultiScannersSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentMultiScannersSelfTest.java
deleted file mode 100644
index f4f9b35ab00..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentMultiScannersSelfTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.spi.GridSpiTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTestConfig;
-import org.junit.Test;
-
-/**
- * Test URI deployment with multiple scanners.
- */
-@GridSpiTest(spi = UriDeploymentSpi.class, group = "Deployment SPI")
-public class GridUriDeploymentMultiScannersSelfTest extends GridUriDeploymentAbstractSelfTest {
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testDeployment() throws Exception {
-        checkTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask0");
-    }
-
-    /**
-     * @return List of deployment sources.
-     */
-    @GridSpiTestConfig
-    public List<String> getUriList() {
-        List<String> uriList = new ArrayList<>();
-
-        // Fake URI.
-        uriList.add(GridTestProperties.getProperty("deploy.uri.http"));
-
-        // One real URI.
-        uriList.add(GridTestProperties.getProperty("ant.urideployment.gar.uri").
-            replace("EXTDATA", U.resolveIgnitePath("modules/extdata").getAbsolutePath()));
-
-        return uriList;
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSimpleSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSimpleSelfTest.java
deleted file mode 100644
index 6dcbf5abc1a..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSimpleSelfTest.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.compute.ComputeJob;
-import org.apache.ignite.compute.ComputeJobAdapter;
-import org.apache.ignite.compute.ComputeJobResult;
-import org.apache.ignite.compute.ComputeTaskAdapter;
-import org.apache.ignite.compute.ComputeTaskName;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.deployment.DeploymentResource;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.spi.GridSpiAbstractTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTestConfig;
-import org.jetbrains.annotations.NotNull;
-import org.junit.Test;
-
-/**
- *
- */
-@GridSpiTest(spi = UriDeploymentSpi.class, group = "Deployment SPI")
-public class GridUriDeploymentSimpleSelfTest extends GridSpiAbstractTest<UriDeploymentSpi> {
-    /**
-     * @return List of URI to use as deployment source.
-     */
-    @GridSpiTestConfig
-    public List<String> getUriList() {
-        // No real gar file is required. Add one just to avoid failure because of missed default directory.
-        return Collections.singletonList(GridTestProperties.getProperty("ant.urideployment.gar.uri").
-            replace("EXTDATA", U.resolveIgnitePath("modules/extdata").getAbsolutePath()));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testSimpleDeploy() throws Exception {
-        UriDeploymentSpi spi = getSpi();
-
-        spi.register(TestTask.class.getClassLoader(), TestTask.class);
-
-        DeploymentResource task = spi.findResource(TestTask.class.getName());
-
-        assert task != null;
-        assert task.getResourceClass() == TestTask.class;
-        assert spi.findResource("TestTaskWithName") == null;
-
-        spi.unregister(TestTask.class.getName());
-
-        assert spi.findResource(TestTask.class.getName()) == null;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testSimpleRedeploy() throws Exception {
-        for (int i = 0; i < 100; i++)
-            testSimpleDeploy();
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testSimpleDeployWithName() throws Exception {
-        UriDeploymentSpi spi = getSpi();
-
-        spi.register(TestTaskWithName.class.getClassLoader(), TestTaskWithName.class);
-
-        DeploymentResource task = spi.findResource("TestTaskWithName");
-
-        assert task != null;
-        assert task.getResourceClass() == TestTaskWithName.class;
-        assert spi.findResource(TestTaskWithName.class.getName()) != null;
-
-        spi.unregister("TestTaskWithName");
-
-        assert spi.findResource("TestTaskWithName") == null;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testSimpleRedeployWithName() throws Exception {
-        for (int i = 0; i < 100; i++)
-            testSimpleDeployWithName();
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testSimpleDeployTwoTasks() throws Exception {
-        UriDeploymentSpi spi = getSpi();
-
-        spi.register(TestTask.class.getClassLoader(), TestTask.class);
-        spi.register(TestTaskWithName.class.getClassLoader(), TestTaskWithName.class);
-
-        DeploymentResource task1 = spi.findResource("TestTaskWithName");
-        DeploymentResource task2 = spi.findResource(TestTask.class.getName());
-
-        assert task1 != null;
-        assert task1.getResourceClass() == TestTaskWithName.class;
-        assert spi.findResource(TestTaskWithName.class.getName()) != null;
-
-        assert task2 != null;
-        assert task2.getResourceClass() == TestTask.class;
-        assert spi.findResource("TestTask") == null;
-
-        spi.unregister("TestTaskWithName");
-
-        assert spi.findResource("TestTaskWithName") == null;
-
-        spi.unregister(TestTask.class.getName());
-
-        assert spi.findResource(TestTask.class.getName()) == null;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testSimpleRedeployTwoTasks() throws Exception {
-        for (int i = 0; i < 100; i++)
-            testSimpleDeployTwoTasks();
-    }
-
-    /**
-     * Test task.
-     */
-    private static class TestTask extends ComputeTaskAdapter<Object, Object> {
-        /** {@inheritDoc} */
-        @NotNull @Override public Map<? extends ComputeJob, ClusterNode> map(List<ClusterNode> subgrid, Object arg) {
-            assert subgrid.size() == 1;
-
-            return Collections.singletonMap(new ComputeJobAdapter() {
-                @Override public Serializable execute() {
-                    return "result";
-                }
-            }, subgrid.get(0));
-        }
-
-        /** {@inheritDoc} */
-        @Override public Object reduce(List<ComputeJobResult> results) {
-            assert results.size() == 1;
-
-            return results.get(0).getData();
-        }
-    }
-
-    /**
-     * Named test task.
-     */
-    @ComputeTaskName("TestTaskWithName")
-    private static class TestTaskWithName extends ComputeTaskAdapter<Object, Object> {
-        /** {@inheritDoc} */
-        @NotNull @Override public Map<? extends ComputeJob, ClusterNode> map(List<ClusterNode> subgrid, Object arg) {
-            assert subgrid.size() == 1;
-
-            return Collections.singletonMap(new ComputeJobAdapter() {
-                @Override public Serializable execute() {
-                    return "result";
-                }
-            }, subgrid.get(0));
-        }
-
-        /** {@inheritDoc} */
-        @Override public Object reduce(List<ComputeJobResult> results) {
-            assert results.size() == 1;
-
-            return results.get(0).getData();
-        }
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.brokenxml b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.brokenxml
deleted file mode 100644
index 79b72e9e352..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.brokenxml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!-...@-->
-
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<!--
-    Spring configuration file for test classes in gar-file.
--->
-<beans>
-    <description>Ignite Spring configuration file in gar-file for ant GAR task.</description>
-
-    <!--
-        Test task specification.
-    -->
-    <bean id="task" class="org.apache.ignite.grid.spi.deployment.uri.tasks.GridUriDeploymentTestTask0"/sdfs>zx
-        <property name="taskTypeId" value="brokenxml-task"/>
-        <property name="version" value="ver1"/>
-    </bean>
-</beans>
\ No newline at end of file
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.empty b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.empty
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.incorrefs b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.incorrefs
deleted file mode 100644
index 880e03b8d9e..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.incorrefs
+++ /dev/null
@@ -1,18 +0,0 @@
-<!-...@-->
-
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<!--
-    Spring configuration file for test classes in gar-file.
--->
-<beans>
-    <description>Ignite Spring configuration file in gar-file for ant GAR task.</description>
-
-    <!--
-        Test task specification.
-    -->
-    <bean id="task" class="org.apache.ignite.grid.spi.deployment.uri.tasks.GridUriDeploymentTestTask0">
-        <property name="taskTypeId" value="incorrectref-task"/>
-        <property name="version" value="ver1"/>
-    </bean>
-</beans>
\ No newline at end of file
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.xml b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.xml
deleted file mode 100644
index d9ff2bc5709..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/META-INF/ignite.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-
-<!--
-    Spring configuration file for test classes in gar-file.
--->
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xsi:schemaLocation="
-        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
-    <description>Ignite Spring configuration file in gar-file.</description>
-
-    <!--
-        Test tasks specification.
-    -->
-    <util:list id="tasks">
-        <value>org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask0</value>
-        <value>org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestWithNameTask0</value>
-    </util:list>
-</beans>
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/package-info.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/package-info.java
deleted file mode 100644
index 24a3c37e27d..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Contains internal tests or test related classes and interfaces.
- */
-
-package org.apache.ignite.spi.deployment.uri;
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/file/GridFileDeploymentSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/file/GridFileDeploymentSelfTest.java
deleted file mode 100644
index 19ec733c514..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/file/GridFileDeploymentSelfTest.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners.file;
-
-import java.util.Collections;
-import java.util.List;
-import org.apache.ignite.spi.deployment.uri.GridUriDeploymentAbstractSelfTest;
-import org.apache.ignite.spi.deployment.uri.UriDeploymentSpi;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.spi.GridSpiTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTestConfig;
-import org.junit.Test;
-
-/**
- * Test file protocol scanner.
- */
-@GridSpiTest(spi = UriDeploymentSpi.class, group = "Deployment SPI")
-public class GridFileDeploymentSelfTest extends GridUriDeploymentAbstractSelfTest {
-    /**
-     * @return List of URI to use as deployment source.
-     */
-    @GridSpiTestConfig
-    public List<String> getUriList() {
-        return Collections.singletonList(GridTestProperties.getProperty("deploy.uri.file"));
-    }
-
-    /**
-     * Tests task from folder 'deploydir.gar'.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testDeploymentFromFolder() throws Exception {
-        checkTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask0");
-        checkTask("GridUriDeploymentTestWithNameTask0");
-    }
-
-    /**
-     * Tests task from file 'deployfile.jar'.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testDeploymentFromJar() throws Exception {
-        checkTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask8");
-        checkTask("GridUriDeploymentTestWithNameTask8");
-    }
-
-    /**
-     * Tests task from file 'deployfile.gar'.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testDeploymentFromGar() throws Exception {
-        checkTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask3");
-        checkTask("GridUriDeploymentTestWithNameTask3");
-    }
-
-    /**
-     * Tests task from file 'deployfile-nodescr.gar'.
-     *
-     * Looks for task {@code GridUriDeploymentTestTask4} without descriptor file from GAR-file.
-     * That task loads resource {@code spring.xml}.
-     *
-     * To check {@code GridDeploymentUriClassLoader} class loader you need to delete all classes
-     * and resources from Junit classpath. Note that class loader searches classes in a GAR file and
-     * not in the parent class loader for junits.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testNoDescriptorDeployment() throws Exception {
-        checkTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask4");
-        checkTask("GridUriDeploymentTestWithNameTask4");
-    }
-
-    /**
-     * Tests task from file 'deployfile-bad.gar'.
-     *
-     * Looks for tasks {@code GridUriDeploymentAbstractTestTask}
-     * {@code GridInnerTestTask}
-     * {@code GridUriDeploymentInterfaceTestTask}
-     * {@code GridUriDeploymentNonePublicTestTask} from GAR-file. Tasks should not be deployed.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testBadDeployment() throws Exception {
-        checkNoTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentAbstractTestTask");
-
-        checkNoTask("org.apache.ignite.spi.deployment.uri.tasks.GridInnerTestTask");
-        checkNoTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentInnerTestTask$GridInnerTestTask");
-        checkNoTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentInnerTestTask.GridInnerTestTask");
-
-        checkNoTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentInterfaceTestTask");
-        checkNoTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentNonePublicTestTask");
-    }
-
-    /**
-     * Tests task from file 'deployfile.jar'.
-     *
-     * Looks for task {@code GridUriDeploymentTestTask9}.
-     * That task loads resource {@code spring9.xml} and imports external class from the same JAR
-     * External class loads resource {@code test9.properties} from the same JAR it is loaded from.
-     *
-     * To check {@code GridDeploymentUriClassLoader} class loader need to delete all classes
-     * and resources from Junit classpath. Note that class loader searches for classes in a JAR
-     * file and not in the parent class loader for junits.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testDependenceJarDeployment() throws Exception {
-        checkTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask9");
-        getSpi().findResource("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask9")
-                .getResourceClass().newInstance();
-    }
-
-    /**
-     * Tests task from file 'deployfile-depend.gar'.
-     *
-     * Looks for task {@code GridUriDeploymentTestTask1} with descriptor file from GAR-file.
-     * That task loads resource {@code spring1.xml} and imports external class from /lib/*.jar
-     * External class loads resource {@code test1.properties}from the same JAR it is loaded from.
-     *
-     * To check {@code GridDeploymentUriClassLoader} class loader need to delete all classes
-     * and resources from Junit classpath. Note that class loader searches for classes in a GAR
-     * file and not in the parent class loader for junits.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testDependenceGarDeployment() throws Exception {
-        checkTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask1");
-        getSpi().findResource("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask1")
-            .getResourceClass().newInstance();
-    }
-
-    /**
-     * Tests task from file 'deploydir-nodescr-depend.gar'.
-     *
-     * Looks for task {@code GridUriDeploymentTestTask2} without descriptor file from GAR-file.
-     * That task loads resource {@code spring2.xml} and imports external class from /lib/*.jar
-     * External class loads resource {@code test2.properties}from the same JAR it is loaded from.
-     *
-     * To check {@code GridDeploymentUriClassLoader} class loader need to delete all classes
-     * and resources from Junit classpath. Note that class loader searches for classes in a GAR
-     * file and not in the parent class loader for junits.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testNoDescriptorDependenceDeployment() throws Exception {
-        checkTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask2");
-        getSpi().findResource("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask2")
-            .getResourceClass().newInstance();
-    }
-
-    /**
-     * Tests task from files 'well-signed-deployfile.gar', 'bad-signed-deployfile.gar',
-     * 'well-signed-deployfile.jar' and 'bad-signed-deployfile.jar'.
-     * Files 'bad-signed-deployfile.gar', 'bad-signed-deployfile.jar' contain non-signed modifications.
-     *
-     * Sign JAR with command:
-     * $ jarsigner -keystore $IGNITE_HOME/modules/tests/config/signeddeploy/keystore -storepass "abc123"
-     *      -keypass "abc123" -signedjar signed-deployfile.jar deployfile.jar business
-     *
-     * Verify signed JAR-file:
-     * $ jarsigner -verify -keystore $IGNITE_HOME/modules/tests/config/signeddeploy/keystore -storepass "abc123"
-     *      -keypass "abc123" signed-deployfile.jar
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testSignedDeployment() throws Exception {
-        checkTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask5");
-        checkTask("GridUriDeploymentTestWithNameTask5");
-        checkTask("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask10");
-        checkTask("GridUriDeploymentTestWithNameTask10");
-
-        assert getSpi().findResource("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask6") == null :
-            "Task from GAR with invalid signature should not be deployed.";
-        assert getSpi().findResource("tasks.GridUriDeploymentTestWithNameTask6")
-            == null : "Task from GAR with invalid signature should not be deployed.";
-        assert getSpi().findResource("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask11") == null :
-            "Task from JAR with invalid signature should not be deployed.";
-        assert getSpi().findResource("GridUriDeploymentTestWithNameTask11")
-            == null : "Task from JAR with invalid signature should not be deployed.";
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/file/GridFileDeploymentUndeploySelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/file/GridFileDeploymentUndeploySelfTest.java
deleted file mode 100644
index e4f19e1edca..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/file/GridFileDeploymentUndeploySelfTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners.file;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.deployment.uri.UriDeploymentSpi;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.spi.GridSpiAbstractTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTestConfig;
-import org.junit.Test;
-
-/**
- * Tests correct task undeployment after source file removing.
- */
-@GridSpiTest(spi = UriDeploymentSpi.class, group = "Deployment SPI")
-public class GridFileDeploymentUndeploySelfTest extends GridSpiAbstractTest<UriDeploymentSpi> {
-    /** */
-    private static String tmpDirPath = System.getProperty("java.io.tmpdir") + '/' + UUID.randomUUID();
-
-    /** */
-    private static final String GAR_FILE_NAME = "deployfile.gar";
-
-    /** {@inheritDoc} */
-    @Override protected void beforeSpiStarted() throws Exception {
-        File deployDir = new File(tmpDirPath);
-
-        assert !deployDir.exists() : "Directory exists " + deployDir.getCanonicalPath();
-
-        boolean mkdir = deployDir.mkdir();
-
-        assert mkdir : "Unable to create directory: " + deployDir.getCanonicalPath();
-
-        info("URI list for test [uriList=" + getUriList() + ']');
-
-        super.beforeSpiStarted();
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testUndeployGarFile() throws Exception {
-        String garFilePath =
-            U.resolveIgnitePath(GridTestProperties.getProperty("ant.urideployment.gar.file")).getPath();
-
-        File garFile = new File(garFilePath);
-
-        assert garFile.exists() : "Test gar file not found [path=" + garFilePath + ']';
-
-        File newGarFile = new File(tmpDirPath + '/' + GAR_FILE_NAME);
-
-        assert !newGarFile.exists();
-
-        U.copy(garFile, newGarFile, false);
-
-        assert newGarFile.exists();
-
-        Thread.sleep(UriDeploymentFileScanner.DFLT_SCAN_FREQ + 3000);
-
-        assert getSpi().findResource("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask3") != null :
-            "Failed to find resource for added GAR file.";
-        assert getSpi().findResource("GridUriDeploymentTestWithNameTask3") != null;
-
-        boolean del = newGarFile.delete();
-
-        assert del : "Filed to delete file [path=" + newGarFile.getAbsolutePath() + ']';
-
-        assert !newGarFile.exists();
-
-        Thread.sleep(UriDeploymentFileScanner.DFLT_SCAN_FREQ + 3000);
-
-        assert getSpi().findResource("org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask3") == null;
-        assert getSpi().findResource("GridUriDeploymentTestWithNameTask3") == null;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Override protected void afterTestsStopped() throws Exception {
-        File deployDir = new File(tmpDirPath);
-
-        if (deployDir.exists())
-            deployDir.delete();
-    }
-
-    /**
-     * @return List of URI to use as deployment source.
-     */
-    @GridSpiTestConfig
-    public List<String> getUriList() {
-        return Collections.singletonList("file:///" + tmpDirPath);
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/file/package-info.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/file/package-info.java
deleted file mode 100644
index 13665557c1f..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/file/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Contains internal tests or test related classes and interfaces.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners.file;
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/http/GridHttpDeploymentSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/http/GridHttpDeploymentSelfTest.java
deleted file mode 100644
index b366d4fe2fa..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/http/GridHttpDeploymentSelfTest.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners.http;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.spi.deployment.uri.GridUriDeploymentAbstractSelfTest;
-import org.apache.ignite.spi.deployment.uri.UriDeploymentSpi;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.spi.GridSpiTest;
-import org.apache.ignite.testframework.junits.spi.GridSpiTestConfig;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.handler.ResourceHandler;
-import org.junit.Test;
-
-/**
- * Test http scanner.
- */
-@GridSpiTest(spi = UriDeploymentSpi.class, group = "Deployment SPI")
-public class GridHttpDeploymentSelfTest extends GridUriDeploymentAbstractSelfTest {
-    /** Frequency */
-    private static final int FREQ = 5000;
-
-    /** */
-    public static final String LIBS_GAR = "libs-file.gar";
-
-    /** */
-    public static final String CLASSES_GAR = "classes-file.gar";
-
-    /** */
-    public static final String ALL_GAR = "file.gar";
-
-    /** */
-    public static final String ALL_JAR = "file.jar";
-
-    /** Gar-file which contains libs. */
-    public static final String LIBS_GAR_FILE_PATH = U.resolveIgnitePath(
-        GridTestProperties.getProperty("ant.urideployment.gar.libs-file")).getPath();
-
-    /** Gar-file which contains classes (cannot be used without libs). */
-    public static final String CLASSES_GAR_FILE_PATH = U.resolveIgnitePath(
-        GridTestProperties.getProperty("ant.urideployment.gar.classes-file")).getPath();
-
-    /** Gar-file which caontains both libs and classes. */
-    public static final String ALL_GAR_FILE_PATH = U.resolveIgnitePath(
-        GridTestProperties.getProperty("ant.urideployment.gar.file")).getPath();
-
-    /** JAR file with tasks and dependencies. */
-    public static final String JAR_FILE_PATH = U.resolveIgnitePath(
-            GridTestProperties.getProperty("urideployment.jar.uri")).getPath();
-
-    /** Jetty. */
-    private static Server srv;
-
-    /** Resource base. */
-    private static String rsrcBase;
-
-    /** {@inheritDoc} */
-    @Override protected void beforeSpiStarted() throws Exception {
-        srv = new Server();
-
-        ServerConnector conn = new ServerConnector(srv);
-
-        conn.setPort(8080);
-
-        srv.addConnector(conn);
-
-        ResourceHandler hnd = new ResourceHandler();
-
-        hnd.setDirectoriesListed(true);
-
-        String garPathTmp = GridTestProperties.getProperty("urideployment.path.tmp");
-
-        File resourseBaseDir = U.resolveIgnitePath(garPathTmp);
-
-        if (resourseBaseDir == null) {
-            resourseBaseDir = new File(U.getIgniteHome(), garPathTmp);
-
-            assertTrue(resourseBaseDir.mkdirs());
-        }
-
-        rsrcBase = resourseBaseDir.getPath();
-
-        hnd.setResourceBase(rsrcBase);
-
-        srv.setHandler(hnd);
-
-        srv.start();
-
-        assert srv.isStarted();
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Override protected void afterTestsStopped() throws Exception {
-        assert srv.isStarted();
-
-        srv.stop();
-
-        assert srv.isStopped();
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testDeployUndeploy2GarFiles() throws Exception {
-        String taskName = "org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask3";
-
-        checkNoTask(taskName);
-
-        try {
-            copyToResourceBase(LIBS_GAR_FILE_PATH, LIBS_GAR);
-
-            copyToResourceBase(CLASSES_GAR_FILE_PATH, CLASSES_GAR);
-
-            waitForTask(taskName, true, FREQ + 3000);
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-        }
-        finally {
-            deleteFromResourceBase(LIBS_GAR);
-            deleteFromResourceBase(CLASSES_GAR);
-
-            waitForTask(taskName, false, FREQ + 3000);
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testDeployUndeployJar() throws Exception {
-        String taskName = "org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask8";
-
-        checkNoTask(taskName);
-
-        try {
-            copyToResourceBase(JAR_FILE_PATH, ALL_JAR);
-
-            waitForTask(taskName, true, FREQ + 3000);
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-        }
-        finally {
-            deleteFromResourceBase(ALL_JAR);
-
-            waitForTask(taskName, false, FREQ + 3000);
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testSameContantFiles() throws Exception {
-        String taskName = "org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestTask3";
-
-        checkNoTask(taskName);
-
-        try {
-            copyToResourceBase(ALL_GAR_FILE_PATH, ALL_GAR);
-
-            waitForTask(taskName, true, FREQ + 3000);
-
-            copyToResourceBase(ALL_GAR_FILE_PATH, "file-copy.gar");
-
-            waitForTask(taskName, true, FREQ + 3000);
-        }
-        catch (Throwable e) {
-            e.printStackTrace();
-        }
-        finally {
-            deleteFromResourceBase(ALL_GAR);
-            deleteFromResourceBase("file-copy.gar");
-
-            waitForTask(taskName, false, FREQ + 3000);
-        }
-    }
-
-    /**
-     * @return Test server URl as deployment source URI.
-     */
-    @GridSpiTestConfig
-    public List<String> getUriList() {
-        return Collections.singletonList("http://freq=" + FREQ + "@localhost:8080/");
-    }
-
-    /**
-     * @param fileName File name.
-     */
-    private void deleteFromResourceBase(String fileName) {
-        File file = new File(rsrcBase + '/' + fileName);
-
-        if (!file.delete())
-            U.warn(log, "Could not delete file: " + file);
-    }
-
-    /**
-     * @param path Path to the file which should be copied.
-     * @param newFileName New file name.
-     * @throws IOException If exception.
-     */
-    private void copyToResourceBase(String path, String newFileName) throws IOException {
-        File file = new File(path);
-
-        assert file.exists() : "Test file not found [path=" + path + ']';
-
-        File newFile = new File(rsrcBase + '/' + newFileName);
-
-        assert !newFile.exists();
-
-        U.copy(file, newFile, false);
-
-        assert newFile.exists();
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/http/package-info.java b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/http/package-info.java
deleted file mode 100644
index e6a79379f5d..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/http/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Contains internal tests or test related classes and interfaces.
- */
-
-package org.apache.ignite.spi.deployment.uri.scanners.http;
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/testsuites/IgniteToolsSelfTestSuite.java b/modules/urideploy/src/test/java/org/apache/ignite/testsuites/IgniteToolsSelfTestSuite.java
deleted file mode 100644
index 6c8d923a94f..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/testsuites/IgniteToolsSelfTestSuite.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.testsuites;
-
-import org.apache.ignite.tools.GridToolsSelfTest;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-/**
- * Tools self-test suite.
- */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
-    GridToolsSelfTest.class
-})
-public class IgniteToolsSelfTestSuite {
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/testsuites/IgniteUriDeploymentTestSuite.java b/modules/urideploy/src/test/java/org/apache/ignite/testsuites/IgniteUriDeploymentTestSuite.java
deleted file mode 100644
index a5b49fa85b4..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/testsuites/IgniteUriDeploymentTestSuite.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.testsuites;
-
-import org.apache.ignite.internal.GridTaskUriDeploymentDeadlockSelfTest;
-import org.apache.ignite.internal.UriDeploymentAbsentProcessorClassTest;
-import org.apache.ignite.p2p.ClassLoadingProblemExceptionTest;
-import org.apache.ignite.p2p.ClassLoadingProblemExtendedLoggingTest;
-import org.apache.ignite.p2p.GridP2PDisabledSelfTest;
-import org.apache.ignite.spi.deployment.uri.GridUriDeploymentClassLoaderMultiThreadedSelfTest;
-import org.apache.ignite.spi.deployment.uri.GridUriDeploymentClassLoaderSelfTest;
-import org.apache.ignite.spi.deployment.uri.GridUriDeploymentClassloaderRegisterSelfTest;
-import org.apache.ignite.spi.deployment.uri.GridUriDeploymentConfigSelfTest;
-import org.apache.ignite.spi.deployment.uri.GridUriDeploymentFileProcessorSelfTest;
-import org.apache.ignite.spi.deployment.uri.GridUriDeploymentMd5CheckSelfTest;
-import org.apache.ignite.spi.deployment.uri.GridUriDeploymentMultiScannersErrorThrottlingTest;
-import org.apache.ignite.spi.deployment.uri.GridUriDeploymentMultiScannersSelfTest;
-import org.apache.ignite.spi.deployment.uri.GridUriDeploymentSimpleSelfTest;
-import org.apache.ignite.spi.deployment.uri.scanners.file.GridFileDeploymentSelfTest;
-import org.apache.ignite.spi.deployment.uri.scanners.file.GridFileDeploymentUndeploySelfTest;
-import org.apache.ignite.spi.deployment.uri.scanners.http.GridHttpDeploymentSelfTest;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-/**
- * Tests against {@link org.apache.ignite.spi.deployment.uri.UriDeploymentSpi}.
- */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
-    GridUriDeploymentConfigSelfTest.class,
-    GridUriDeploymentSimpleSelfTest.class,
-    GridUriDeploymentClassloaderRegisterSelfTest.class,
-    GridUriDeploymentFileProcessorSelfTest.class,
-    GridUriDeploymentClassLoaderSelfTest.class,
-    GridUriDeploymentClassLoaderMultiThreadedSelfTest.class,
-    GridUriDeploymentMultiScannersSelfTest.class,
-    GridUriDeploymentConfigSelfTest.class,
-
-    GridFileDeploymentUndeploySelfTest.class,
-    GridHttpDeploymentSelfTest.class,
-
-    GridFileDeploymentSelfTest.class,
-    GridUriDeploymentMultiScannersErrorThrottlingTest.class,
-    GridUriDeploymentMd5CheckSelfTest.class,
-
-    // GAR Ant task tests.
-    IgniteToolsSelfTestSuite.class,
-
-    GridTaskUriDeploymentDeadlockSelfTest.class,
-    GridP2PDisabledSelfTest.class,
-    ClassLoadingProblemExceptionTest.class,
-    ClassLoadingProblemExtendedLoggingTest.class,
-    UriDeploymentAbsentProcessorClassTest.class
-})
-public class IgniteUriDeploymentTestSuite {
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/tools/GridToolsSelfTest.java b/modules/urideploy/src/test/java/org/apache/ignite/tools/GridToolsSelfTest.java
deleted file mode 100644
index 976b27acb68..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/tools/GridToolsSelfTest.java
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tools;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.testframework.config.GridTestProperties;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.apache.ignite.testframework.junits.common.GridCommonTest;
-import org.apache.ignite.util.antgar.IgniteDeploymentGarAntTask;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.junit.Test;
-
-/**
- * Tests for Ant task generating GAR file.
- */
-@GridCommonTest(group = "Tools")
-public class GridToolsSelfTest extends GridCommonAbstractTest {
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testCorrectAntGarTask() throws Exception {
-        String tmpDirName = GridTestProperties.getProperty("ant.gar.tmpdir");
-        String srcDirName = GridTestProperties.getProperty("ant.gar.srcdir");
-        String baseDirName = tmpDirName + File.separator + System.currentTimeMillis() + "_0";
-        String metaDirName = baseDirName + File.separator + "META-INF";
-        String garFileName = baseDirName + ".gar";
-        String garDescDirName =
-            U.resolveIgnitePath(GridTestProperties.getProperty("ant.gar.descriptor.dir")).getAbsolutePath()
-            + File.separator + "ignite.xml";
-
-        // Make base and META-INF dir.
-        boolean mkdir = new File(baseDirName).mkdirs();
-
-        assert mkdir;
-
-        mkdir = new File(metaDirName).mkdirs();
-
-        assert mkdir;
-
-        // Make Gar file
-        U.copy(new File(garDescDirName), new File(metaDirName + File.separator + "ignite.xml"), true);
-
-        // Copy files to basedir
-        U.copy(new File(srcDirName), new File(baseDirName), true);
-
-        IgniteDeploymentGarAntTask garTask = new IgniteDeploymentGarAntTask();
-
-        Project garProject = new Project();
-
-        garProject.setName("Gar test project");
-
-        garTask.setDestFile(new File(garFileName));
-        garTask.setBasedir(new File(baseDirName));
-        garTask.setProject(garProject);
-
-        garTask.execute();
-
-        File garFile = new File(garFileName);
-
-        assert garFile.exists();
-
-        boolean res = checkStructure(garFile, true);
-
-        assert res;
-    }
-
-    /**
-     * @param garFile GAR file.
-     * @param hasDescr Whether GAR file has descriptor.
-     * @throws IOException If GAR file is not found.
-     * @return Whether GAR file structure is correct.
-     */
-    private boolean checkStructure(File garFile, boolean hasDescr) throws IOException {
-        ZipFile zip = new ZipFile(garFile);
-
-        String descr = "META-INF/ignite.xml";
-
-        ZipEntry entry = zip.getEntry(descr);
-
-        if (entry == null && !hasDescr) {
-            if (log().isInfoEnabled()) {
-                log().info("Process deployment without descriptor file [path=" +
-                        descr + ", file=" + garFile.getAbsolutePath() + ']');
-            }
-
-            return true;
-        }
-        else if (entry != null && hasDescr) {
-            InputStream in = null;
-
-            try {
-                in = new BufferedInputStream(zip.getInputStream(entry));
-
-                return true;
-            }
-            finally {
-                U.close(in, log());
-            }
-        }
-        else
-            return false;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testAntGarTaskWithExternalP2PDescriptor() throws Exception {
-        String tmpDirName = GridTestProperties.getProperty("ant.gar.tmpdir");
-        String srcDirName = GridTestProperties.getProperty("ant.gar.srcdir");
-        String baseDirName = tmpDirName + File.separator + System.currentTimeMillis() + "_1";
-        String metaDirName = baseDirName + File.separator + "META-INF";
-        String garFileName = baseDirName + ".gar";
-        String garDescrDirName =
-            U.resolveIgnitePath(GridTestProperties.getProperty("ant.gar.descriptor.dir")).getAbsolutePath();
-
-        // Make base and META-INF dir.
-        boolean mkdir = new File(baseDirName).mkdirs();
-
-        assert mkdir;
-
-        mkdir = new File(metaDirName).mkdirs();
-
-        assert mkdir;
-
-        // Copy files to basedir
-        U.copy(new File(srcDirName), new File(baseDirName), true);
-
-        IgniteDeploymentGarAntTask garTask = new IgniteDeploymentGarAntTask();
-
-        Project garProject = new Project();
-
-        garProject.setName("Gar test project");
-
-        garTask.setDestFile(new File(garFileName));
-        garTask.setDescrdir(new File(garDescrDirName));
-        garTask.setBasedir(new File(baseDirName));
-        garTask.setProject(garProject);
-
-        garTask.execute();
-
-        File garFile = new File(garFileName);
-
-        assert garFile.exists();
-
-        boolean res = checkStructure(garFile, true);
-
-        assert res;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testAntGarTaskWithDoubleP2PDescriptor() throws Exception {
-        String tmpDirName = GridTestProperties.getProperty("ant.gar.tmpdir");
-        String srcDirName = GridTestProperties.getProperty("ant.gar.srcdir");
-        String baseDirName = tmpDirName + File.separator + System.currentTimeMillis() + "_2";
-        String metaDirName = baseDirName + File.separator + "META-INF";
-        String garFileName = baseDirName + ".gar";
-        String garDescrDirName =
-            U.resolveIgnitePath(GridTestProperties.getProperty("ant.gar.descriptor.dir")).getAbsolutePath()
-            + File.separator + "ignite.xml";
-
-        // Make base and META-INF dir.
-        boolean mkdir = new File(baseDirName).mkdirs();
-
-        assert mkdir;
-
-        mkdir = new File(metaDirName).mkdirs();
-
-        assert mkdir;
-
-        // Make Gar file
-        U.copy(new File(garDescrDirName), new File(metaDirName + File.separator + "ignite.xml"), true);
-
-        // Copy files to basedir
-        U.copy(new File(srcDirName), new File(baseDirName), true);
-
-        IgniteDeploymentGarAntTask garTask = new IgniteDeploymentGarAntTask();
-
-        Project garProject = new Project();
-
-        garProject.setName("Gar test project");
-
-        garTask.setDestFile(new File(garFileName));
-        garTask.setDescrdir(new File(garDescrDirName));
-        garTask.setBasedir(new File(baseDirName));
-        garTask.setProject(garProject);
-
-        try {
-            garTask.execute();
-
-            assert false;
-        }
-        catch (BuildException e) {
-            if (log().isInfoEnabled())
-                log().info(e.getMessage());
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testAntGarTaskWithDirDescriptor() throws Exception {
-        String tmpDirName = GridTestProperties.getProperty("ant.gar.tmpdir");
-        String srcDirName = GridTestProperties.getProperty("ant.gar.srcdir");
-        String baseDirName = tmpDirName + File.separator + System.currentTimeMillis() + "_3";
-        String metaDirName = baseDirName + File.separator + "META-INF";
-        String garFileName = baseDirName + ".gar";
-
-        // Make base and META-INF dir.
-        boolean mkdir = new File(baseDirName).mkdirs();
-
-        assert mkdir;
-
-        mkdir = new File(metaDirName).mkdirs();
-
-        assert mkdir;
-
-        // Copy files to basedir
-        U.copy(new File(srcDirName), new File(baseDirName), true);
-
-        IgniteDeploymentGarAntTask garTask = new IgniteDeploymentGarAntTask();
-
-        Project garProject = new Project();
-
-        garProject.setName("Gar test project");
-
-        garTask.setDestFile(new File(garFileName));
-        garTask.setBasedir(new File(baseDirName));
-        garTask.setProject(garProject);
-        garTask.setDescrdir(new File(garFileName));
-
-        try {
-            garTask.execute();
-
-            assert false;
-        }
-        catch (BuildException e) {
-            if (log().isInfoEnabled())
-                log().info(e.getMessage());
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testAntGarTaskWithNullDescriptor() throws Exception {
-        String tmpDirName = GridTestProperties.getProperty("ant.gar.tmpdir");
-        String srcDirName = GridTestProperties.getProperty("ant.gar.srcdir");
-        String baseDirName = tmpDirName + File.separator + System.currentTimeMillis() + "_4";
-        String metaDirName = baseDirName + File.separator + "META-INF";
-        String garFileName = baseDirName + ".gar";
-
-        // Make base and META-INF dir.
-        boolean mkdir = new File(baseDirName).mkdirs();
-
-        assert mkdir;
-
-        mkdir = new File(metaDirName).mkdirs();
-
-        assert mkdir;
-
-        // Copy files to basedir
-        U.copy(new File(srcDirName), new File(baseDirName), true);
-
-        IgniteDeploymentGarAntTask garTask = new IgniteDeploymentGarAntTask();
-
-        Project garProject = new Project();
-
-        garProject.setName("Gar test project");
-
-        garTask.setDestFile(new File(garFileName));
-        garTask.setBasedir(new File(baseDirName));
-        garTask.setProject(garProject);
-
-        try {
-            garTask.execute();
-        }
-        catch (BuildException e) {
-            if (log().isInfoEnabled())
-                log().info(e.getMessage());
-
-            assert false;
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testAntGarTaskWithFileBaseDir() throws Exception {
-        String tmpDirName = GridTestProperties.getProperty("ant.gar.tmpdir");
-        String srcDirName = GridTestProperties.getProperty("ant.gar.srcdir");
-        String baseDirName = tmpDirName + File.separator + System.currentTimeMillis() + "_5";
-        String metaDirName = baseDirName + File.separator + "META-INF";
-        String garFileName = baseDirName + ".gar";
-
-        // Make base and META-INF dir.
-        boolean mkdir = new File(baseDirName).mkdirs();
-
-        assert mkdir;
-
-        mkdir = new File(metaDirName).mkdirs();
-
-        assert mkdir;
-
-        // Copy files to basedir
-        U.copy(new File(srcDirName), new File(baseDirName), true);
-
-        IgniteDeploymentGarAntTask garTask = new IgniteDeploymentGarAntTask();
-
-        Project garProject = new Project();
-
-        garProject.setName("Gar test project");
-
-        garTask.setDestFile(new File(garFileName));
-        garTask.setBasedir(new File(garFileName));
-        garTask.setProject(garProject);
-        garTask.setDescrdir(new File(garFileName));
-
-        try {
-            garTask.execute();
-
-            assert false;
-        }
-        catch (BuildException e) {
-            if (log().isInfoEnabled())
-                log().info(e.getMessage());
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testAntGarTaskToString() throws Exception {
-        String tmpDirName = GridTestProperties.getProperty("ant.gar.tmpdir");
-        String srcDirName = GridTestProperties.getProperty("ant.gar.srcdir");
-        String baseDirName = tmpDirName + File.separator + System.currentTimeMillis() + "_6";
-        String metaDirName = baseDirName + File.separator + "META-INF";
-        String garFileName = baseDirName + ".gar";
-
-        // Make base and META-INF dir.
-        boolean mkdir = new File(baseDirName).mkdirs();
-
-        assert mkdir;
-
-        mkdir = new File(metaDirName).mkdirs();
-
-        assert mkdir;
-
-        // Copy files to basedir
-        U.copy(new File(srcDirName), new File(baseDirName), true);
-
-        IgniteDeploymentGarAntTask garTask = new IgniteDeploymentGarAntTask();
-
-        Project garProject = new Project();
-
-        garProject.setName("Gar test project");
-
-        garTask.setDestFile(new File(garFileName));
-        garTask.setBasedir(new File(garFileName));
-        garTask.setProject(garProject);
-        garTask.setDescrdir(new File(garFileName));
-
-        garTask.toString();
-    }
-}
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/tools/gartask/META-INF/ignite.xml b/modules/urideploy/src/test/java/org/apache/ignite/tools/gartask/META-INF/ignite.xml
deleted file mode 100644
index a85e33e3308..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/tools/gartask/META-INF/ignite.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-
-<!--
-    Spring configuration file for test classes in gar-file.
--->
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xsi:schemaLocation="
-        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
-    <description>Ignite Spring configuration file in gar-file.</description>
-
-    <!--
-        Test tasks specification.
-    -->
-    <util:list id="tasks">
-        <value>org.apache.ignite.grid.tests.p2p.GridP2PTestTask</value>
-        <value>org.apache.ignite.spi.deployment.uri.tasks.GridUriDeploymentTestWithNameTask0</value>
-    </util:list>
-</beans>
diff --git a/modules/urideploy/src/test/java/org/apache/ignite/tools/package-info.java b/modules/urideploy/src/test/java/org/apache/ignite/tools/package-info.java
deleted file mode 100644
index 5ad78a880d1..00000000000
--- a/modules/urideploy/src/test/java/org/apache/ignite/tools/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Contains internal tests or test related classes and interfaces.
- */
-
-package org.apache.ignite.tools;
diff --git a/pom.xml b/pom.xml
index b7babc3d803..ab17fb30a86 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,7 +54,6 @@
         <module>modules/clients</module>
         <module>modules/spring</module>
         <module>modules/web</module>
-        <module>modules/urideploy</module>
         <module>modules/indexing</module>
         <module>modules/json</module>
         <module>modules/rest-http</module>