You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2022/11/22 17:01:43 UTC

[sling-ide-tooling] branch feature/new-tooling-support-bundles updated (4e4d670f -> 00cb42b6)

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

kwin pushed a change to branch feature/new-tooling-support-bundles
in repository https://gitbox.apache.org/repos/asf/sling-ide-tooling.git


 discard 4e4d670f SLING-11694 Embed new Tooling Support Install/Source bundles
     new 00cb42b6 SLING-11694 Embed new Tooling Support Install/Source bundles

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (4e4d670f)
            \
             N -- N -- N   refs/heads/feature/new-tooling-support-bundles (00cb42b6)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 shared/api/pom.xml                                 |  4 +--
 shared/artifacts/bnd.bnd                           |  1 -
 shared/artifacts/pom.xml                           | 39 ++++++++++++++++++--
 .../ide/artifacts/EmbeddedArtifactLocator.java     |  6 ++--
 .../ide/artifacts/impl/ArtifactsLocatorImpl.java   | 41 +++++++++++-----------
 .../artifacts/impl/ArtifactsLocatorImplTest.java   | 11 ++++--
 shared/impl-vlt/pom.xml                            |  6 ++--
 shared/parent/pom.xml                              |  2 ++
 8 files changed, 77 insertions(+), 33 deletions(-)


[sling-ide-tooling] 01/01: SLING-11694 Embed new Tooling Support Install/Source bundles

Posted by kw...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch feature/new-tooling-support-bundles
in repository https://gitbox.apache.org/repos/asf/sling-ide-tooling.git

commit 00cb42b60fca691e4ba447b153881f17f087a414
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Tue Nov 22 13:45:45 2022 +0100

    SLING-11694 Embed new Tooling Support Install/Source bundles
    
    WIP
---
 .../core/internal/SlingLaunchpadBehaviour.java     |  8 +--
 shared/api/pom.xml                                 |  5 +-
 .../java/org/apache/sling/ide/osgi/OsgiClient.java | 29 ++++++-----
 .../apache/sling/ide/osgi/impl/HttpOsgiClient.java | 34 ++++---------
 .../sling/ide/osgi/impl/HttpOsgiClientIT.java      |  5 +-
 shared/artifacts/bnd.bnd                           |  1 -
 shared/artifacts/pom.xml                           | 59 ++++++++++++++++++++--
 .../ide/artifacts/EmbeddedArtifactLocator.java     |  6 ++-
 .../ide/artifacts/impl/ArtifactsLocatorImpl.java   | 41 ++++++++-------
 .../artifacts/impl/ArtifactsLocatorImplTest.java   | 55 ++++++++++++++++++++
 shared/impl-vlt/pom.xml                            |  6 +--
 shared/parent/pom.xml                              |  2 +
 12 files changed, 171 insertions(+), 80 deletions(-)

diff --git a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java
index 81dd8928..974bd67d 100644
--- a/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java
+++ b/eclipse/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java
@@ -110,7 +110,7 @@ public class SlingLaunchpadBehaviour extends ServerBehaviourDelegateWithModulePu
 	            EmbeddedArtifactLocator artifactLocator = Activator.getDefault().getArtifactLocator();
 	
 	            installBundle(monitor,client, artifactLocator.loadSourceSupportBundle(), SUPPORT_SOURCE_BUNDLE_SYMBOLIC_NAME); // 15/50 done
-	            installBundle(monitor,client, artifactLocator.loadToolingSupportBundle(), SUPPORT_BUNDLE_SYMBOLIC_NAME); // 20/50 done
+	            installBundle(monitor,client, artifactLocator.loadInstallSupportBundle(), SUPPORT_BUNDLE_SYMBOLIC_NAME); // 20/50 done
 	            
 	        } catch ( IOException | OsgiClientException e) {
 	            Activator.getDefault().getPluginLogger()
@@ -355,8 +355,8 @@ public class SlingLaunchpadBehaviour extends ServerBehaviourDelegateWithModulePu
 
             //TODO SLING-3767:
             //osgiClient must have a timeout!!!
-            if ( installLocally ) {
-                osgiClient.installLocalBundle(outputLocation.toFile().toPath());
+            if (installLocally) {
+                osgiClient.installBundle(outputLocation.toFile().toPath());
                 monitor.worked(3);
             } else {
 
@@ -364,7 +364,7 @@ public class SlingLaunchpadBehaviour extends ServerBehaviourDelegateWithModulePu
                 InputStream bundle = builder.buildJar(outputFolder);
                 monitor.worked(1);
                 
-                osgiClient.installLocalBundle(bundle, outputFolder.getLocation().toOSString());
+                osgiClient.installBundle(bundle, outputFolder.getLocation().toOSString());
                 monitor.worked(2);
             }
 
diff --git a/shared/api/pom.xml b/shared/api/pom.xml
index 9fc914c5..e18dd2ee 100644
--- a/shared/api/pom.xml
+++ b/shared/api/pom.xml
@@ -46,12 +46,12 @@
 								<artifactItem>
 									<groupId>org.apache.sling</groupId>
 									<artifactId>org.apache.sling.tooling.support.install</artifactId>
-									<version>1.0.6</version>
+									<version>${toolingInstallVersion}</version>
 								</artifactItem>
 								<artifactItem>
 									<groupId>org.apache.sling</groupId>
 									<artifactId>org.apache.sling.tooling.support.source</artifactId>
-									<version>1.0.4</version>
+									<version>${toolingSourceVersion}</version>
 								</artifactItem>
 								<artifactItem>
 									<groupId>org.apache.sling</groupId>
@@ -126,6 +126,7 @@
 							<startTimeoutSeconds>${startTimeoutSeconds}</startTimeoutSeconds>
 						</launch>
 					</launches>
+					
 				</configuration>
 				<executions>
 					<execution>
diff --git a/shared/api/src/main/java/org/apache/sling/ide/osgi/OsgiClient.java b/shared/api/src/main/java/org/apache/sling/ide/osgi/OsgiClient.java
index 00b58b88..bfb0861d 100644
--- a/shared/api/src/main/java/org/apache/sling/ide/osgi/OsgiClient.java
+++ b/shared/api/src/main/java/org/apache/sling/ide/osgi/OsgiClient.java
@@ -37,33 +37,33 @@ public interface OsgiClient extends AutoCloseable {
 
     Version getBundleVersion(String bundleSymbolicName) throws OsgiClientException;
 
-    void installBundle(InputStream in, String fileName) throws OsgiClientException;
-
     /**
-     * Installs a bundle from a local directory
-     * 
+     * Installs a bundle from a JAR.
      * <p>
-     * The Sling launchpad instance must have filesystem access to the specified <tt>explodedBundleLocation</tt>
-     * </p>
+     * Leverages the <a href="https://felix.apache.org/documentation/subprojects/apache-felix-web-console/web-console-restful-api.html">Felix Web Console ReST endpoint</a>.
+     * @param in the contents of the jarred bundle
+     * @param sourceLocation the source location, for informative purposes only
      * 
-     * @param explodedBundleLocation
      * @throws OsgiClientException
      */
-    void installLocalBundle(Path explodedBundleLocation) throws OsgiClientException;
+    void installBundle(InputStream in, String sourceLocation) throws OsgiClientException;
 
     /**
-     * Installs a local bundle from an already-built jar file
+     * Installs a bundle from a local filesystem directory.
      * 
-     * @param jarredBundle the contents of the jarred bundle
-     * @param sourceLocation the source location, for informative purposes only
+     * <strong>The Sling launchpad instance must have filesystem access to the specified <tt>explodedBundleLocation</tt></strong>
+     * <p>
+     * Leverages the <a href="https://github.com/apache/sling-org-apache-sling-tooling-support-install">Sling Tooling Support Install bundle</a>.
      * 
+     * @param explodedBundleLocation the local path of the directory containing the exploded bundle
      * @throws OsgiClientException
      */
-    void installLocalBundle(InputStream jarredBundle, String sourceLocation) throws OsgiClientException;
+    void installBundle(Path explodedBundleLocation) throws OsgiClientException;
     
     /**
      * Finds source references for all bundles deployed in the Sling instance
-     * 
+     * <p>
+     * Leverages the <a href="https://github.com/apache/sling-org-apache-sling-tooling-support-source">Sling Tooling Support Source bundle</a>.
      * @return the source references, possibly empty
      * @throws OsgiClientException
      */
@@ -71,7 +71,8 @@ public interface OsgiClient extends AutoCloseable {
     
     /**
      * Uninstalls the bundle with the specified Bundle-SymbolicName, if present
-     * 
+     * <p>
+     * Leverages the <a href="https://felix.apache.org/documentation/subprojects/apache-felix-web-console/web-console-restful-api.html">Felix Web Console ReST endpoint</a>.
      * @param bundleSymbolicName The Bundle-SymbolicName
      * @return true in case a bundle with that BSN was found and uninstalled, false in case the BSN was not found
      * @throws OsgiClientException error when trying to uninstall the bundle
diff --git a/shared/api/src/main/java/org/apache/sling/ide/osgi/impl/HttpOsgiClient.java b/shared/api/src/main/java/org/apache/sling/ide/osgi/impl/HttpOsgiClient.java
index 16375121..10cc40e1 100644
--- a/shared/api/src/main/java/org/apache/sling/ide/osgi/impl/HttpOsgiClient.java
+++ b/shared/api/src/main/java/org/apache/sling/ide/osgi/impl/HttpOsgiClient.java
@@ -296,7 +296,7 @@ public class HttpOsgiClient implements OsgiClient, AutoCloseable {
 	}
 
 	@Override
-	public void installLocalBundle(final Path explodedBundleLocation) throws OsgiClientException {
+	public void installBundle(final Path explodedBundleLocation) throws OsgiClientException {
 
 		if (explodedBundleLocation == null) {
 			throw new IllegalArgumentException("explodedBundleLocation may not be null");
@@ -305,24 +305,19 @@ public class HttpOsgiClient implements OsgiClient, AutoCloseable {
 		List<? extends NameValuePair> parameters = Collections
 				.singletonList(new BasicNameValuePair("dir", explodedBundleLocation.toString()));
 		try {
-			installLocalBundle(new UrlEncodedFormEntity(parameters), explodedBundleLocation.toString());
+			HttpPost request = new HttpPost(repositoryInfo.getUrl().resolve("system/sling/tooling/install"));
+			request.setEntity(new UrlEncodedFormEntity(parameters));
+			BundleInstallerResult result = executeJsonRequest(request, BundleInstallerResult.class, "install local bundle from " + explodedBundleLocation.toString());
+			if (!result.isSuccessful()) {
+				String errorMessage = !result.hasMessage() ? "Bundle deployment failed, please check the Sling logs"
+						: result.getMessage();
+				throw new OsgiClientException(errorMessage);
+			}
 		} catch (UnsupportedEncodingException e) {
 			throw new OsgiClientException("Cannot install local bundle due to unsupported encoding", e);
 		}
 	}
 
-	@Override
-	public void installLocalBundle(final InputStream jarredBundle, String sourceLocation) throws OsgiClientException {
-
-		if (jarredBundle == null) {
-			throw new IllegalArgumentException("jarredBundle may not be null");
-		}
-
-		MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
-		entityBuilder.addBinaryBody("bundle", jarredBundle, ContentType.DEFAULT_BINARY, "bundle.jar");
-		installLocalBundle(entityBuilder.build(), sourceLocation);
-	}
-
 	@Override
 	public List<SourceReference> findSourceReferences() throws OsgiClientException {
 		SourceBundleData[] sourceBundleData = executeJsonGetRequest("system/sling/tooling/sourceReferences.json", SourceBundleData[].class, "find source references");
@@ -449,17 +444,6 @@ public class HttpOsgiClient implements OsgiClient, AutoCloseable {
 
 	}
 
-	void installLocalBundle(HttpEntity httpEntity, String bundleSource) throws OsgiClientException {
-		HttpPost request = new HttpPost(repositoryInfo.getUrl().resolve("system/sling/tooling/install"));
-		request.setEntity(httpEntity);
-		BundleInstallerResult result = executeJsonRequest(request, BundleInstallerResult.class, "install local bundle from " + bundleSource);
-		if (!result.isSuccessful()) {
-			String errorMessage = !result.hasMessage() ? "Bundle deployment failed, please check the Sling logs"
-					: result.getMessage();
-			throw new OsgiClientException(errorMessage);
-		}
-	}
-
 	private <T> T executeJsonGetRequest(String relativePath, Class<T> jsonObjectClass, String requestLabel) throws OsgiClientException {
 		HttpGet request = new HttpGet(repositoryInfo.getUrl().resolve(relativePath));
 		return executeJsonRequest(request, jsonObjectClass, requestLabel);
diff --git a/shared/api/src/test/java/org/apache/sling/ide/osgi/impl/HttpOsgiClientIT.java b/shared/api/src/test/java/org/apache/sling/ide/osgi/impl/HttpOsgiClientIT.java
index d5466263..131ca5b9 100644
--- a/shared/api/src/test/java/org/apache/sling/ide/osgi/impl/HttpOsgiClientIT.java
+++ b/shared/api/src/test/java/org/apache/sling/ide/osgi/impl/HttpOsgiClientIT.java
@@ -88,11 +88,8 @@ public class HttpOsgiClientIT {
     		osgiClient.installBundle(input, "org.apache.sling.api");
     	}
     	osgiClient.waitForComponentRegistered("org.apache.sling.tooling.support.install.impl.InstallServlet", 20000, 500);
-    	try (InputStream input = Objects.requireNonNull(this.getClass().getResourceAsStream("/org.apache.sling.commons.messaging.jar"))) {
-    		osgiClient.installLocalBundle(input, "commons-messaging.jar");
-    	}
     	
-    	osgiClient.installLocalBundle(explodedJarFolder);
+    	osgiClient.installBundle(explodedJarFolder);
         osgiClient.uninstallBundle("org.apache.sling.tooling.support.install");
     }
     
diff --git a/shared/artifacts/bnd.bnd b/shared/artifacts/bnd.bnd
index 09df554a..e69de29b 100644
--- a/shared/artifacts/bnd.bnd
+++ b/shared/artifacts/bnd.bnd
@@ -1 +0,0 @@
--includeresource: org.apache.sling.tooling.support*.jar
diff --git a/shared/artifacts/pom.xml b/shared/artifacts/pom.xml
index 667caef4..844541d9 100644
--- a/shared/artifacts/pom.xml
+++ b/shared/artifacts/pom.xml
@@ -48,19 +48,70 @@
             <scope>provided</scope>
         </dependency>
 
-        <!-- will be embedded -->
+        <!-- embedded via Bnd-->
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.tooling.support.install</artifactId>
-            <version>1.0.6</version>
+            <version>${toolingInstallVersion}</version>
             <scope>provided</scope>
         </dependency>
-        <!-- will be embedded -->
+        <!-- embedded via Bnd-->
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.tooling.support.source</artifactId>
-            <version>1.0.4</version>
+            <version>${toolingSourceVersion}</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-simple</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>2.11.0</version>
+			<scope>test</scope>
+		</dependency>
     </dependencies>
+    <build>
+	    <plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>embed-tooling-jars</id>
+						<phase>process-sources</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>org.apache.sling</groupId>
+									<artifactId>org.apache.sling.tooling.support.install</artifactId>
+									<version>${toolingInstallVersion}</version>
+								</artifactItem>
+								<artifactItem>
+									<groupId>org.apache.sling</groupId>
+									<artifactId>org.apache.sling.tooling.support.source</artifactId>
+									<version>${toolingSourceVersion}</version>
+								</artifactItem>
+							</artifactItems>
+							<outputDirectory>${project.build.outputDirectory}</outputDirectory>
+							<overWriteReleases>true</overWriteReleases>
+							<overWriteSnapshots>true</overWriteSnapshots>
+							<stripVersion>true</stripVersion>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+	    </plugins>
+    </build>
 </project>
diff --git a/shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/EmbeddedArtifactLocator.java b/shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/EmbeddedArtifactLocator.java
index 6982de98..eb440faf 100644
--- a/shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/EmbeddedArtifactLocator.java
+++ b/shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/EmbeddedArtifactLocator.java
@@ -16,13 +16,15 @@
  */
 package org.apache.sling.ide.artifacts;
 
+import java.io.IOException;
+
 public interface EmbeddedArtifactLocator {
 
     public static final String SUPPORT_BUNDLE_SYMBOLIC_NAME = "org.apache.sling.tooling.support.install";
     
     public static final String SUPPORT_SOURCE_BUNDLE_SYMBOLIC_NAME = "org.apache.sling.tooling.support.source";
 
-    EmbeddedArtifact loadToolingSupportBundle();
+    EmbeddedArtifact loadInstallSupportBundle() throws IOException;
     
-    EmbeddedArtifact loadSourceSupportBundle();
+    EmbeddedArtifact loadSourceSupportBundle() throws IOException;
 }
diff --git a/shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/impl/ArtifactsLocatorImpl.java b/shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/impl/ArtifactsLocatorImpl.java
index 3dc74968..e9cba7e9 100644
--- a/shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/impl/ArtifactsLocatorImpl.java
+++ b/shared/artifacts/src/main/java/org/apache/sling/ide/artifacts/impl/ArtifactsLocatorImpl.java
@@ -16,7 +16,10 @@
  */
 package org.apache.sling.ide.artifacts.impl;
 
+import java.io.IOException;
 import java.net.URL;
+import java.util.jar.Attributes;
+import java.util.jar.JarInputStream;
 
 import org.apache.sling.ide.artifacts.EmbeddedArtifact;
 import org.apache.sling.ide.artifacts.EmbeddedArtifactLocator;
@@ -26,37 +29,33 @@ import org.osgi.service.component.annotations.Component;
 public class ArtifactsLocatorImpl implements EmbeddedArtifactLocator {
 
 	public ArtifactsLocatorImpl() {
-		
 	}
 
     @Override
-    public EmbeddedArtifact loadToolingSupportBundle() {
-
-        String version = "1.0.6"; // TODO - remove version hardcoding
-        String artifactId = "org.apache.sling.tooling.support.install";
-        String extension = "jar";
+    public EmbeddedArtifact loadInstallSupportBundle() throws IOException {
+    	return getArtifactFromResource("org.apache.sling.tooling.support.install");
+    }
 
-        URL jarUrl = loadResource(artifactId + "-" + version
-                + "." + extension);
+    @Override
+	public EmbeddedArtifact loadSourceSupportBundle() throws IOException {
+	    return getArtifactFromResource("org.apache.sling.tooling.support.source");
+	}
 
-        return new EmbeddedArtifact(artifactId + "-" + version + "." + extension, version, jarUrl);
+	private EmbeddedArtifact getArtifactFromResource(String artifactId) throws IOException {
+    	URL jarUrl = loadResource(artifactId + ".jar");
+        // extract version from it
+        String version = getVersionFromJarUrl(jarUrl);
+        return new EmbeddedArtifact(artifactId + "-" + version + ".jar", version, jarUrl);
     }
 
-    @Override
-    public EmbeddedArtifact loadSourceSupportBundle() {
-        
-        String version = "1.0.4"; // TODO - remove version hardcoding
-        String artifactId = "org.apache.sling.tooling.support.source";
-        String extension = "jar";
-        
-        URL jarUrl = loadResource(artifactId + "-" + version
-                + "." + extension);
-        
-        return new EmbeddedArtifact(artifactId + "-" + version + "." + extension, version, jarUrl);
+    private String getVersionFromJarUrl(URL url) throws IOException {
+    	// extract version from it
+        try (JarInputStream jarInput = new JarInputStream(url.openStream())) {
+        	return jarInput.getManifest().getMainAttributes().getValue(Attributes.Name.IMPLEMENTATION_VERSION);
+        }
     }
 
     private URL loadResource(String resourceLocation) {
-
         URL resourceUrl = this.getClass().getClassLoader().getResource(resourceLocation);
         if (resourceUrl == null) {
             throw new RuntimeException("Unable to locate bundle resource " + resourceLocation);
diff --git a/shared/artifacts/src/test/java/org/apache/sling/ide/artifacts/impl/ArtifactsLocatorImplTest.java b/shared/artifacts/src/test/java/org/apache/sling/ide/artifacts/impl/ArtifactsLocatorImplTest.java
new file mode 100644
index 00000000..74a6867d
--- /dev/null
+++ b/shared/artifacts/src/test/java/org/apache/sling/ide/artifacts/impl/ArtifactsLocatorImplTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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.sling.ide.artifacts.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.sling.ide.artifacts.EmbeddedArtifact;
+import org.junit.Test;
+
+public class ArtifactsLocatorImplTest {
+
+	@Test
+	public void testLoadSourceSupportBundle() throws IOException {
+		ArtifactsLocatorImpl artifactsLocator = new ArtifactsLocatorImpl();
+		EmbeddedArtifact embeddedArtifact = artifactsLocator.loadSourceSupportBundle();
+		assertEmbeddedArtifact(embeddedArtifact, "org.apache.sling.tooling.support.source.jar");
+		assertEquals("1.1.0-SNAPSHOT", embeddedArtifact.getVersion());
+		assertEquals("org.apache.sling.tooling.support.source-1.1.0-SNAPSHOT.jar", embeddedArtifact.getName());
+	}
+
+	@Test
+	public void testLoadInstallSupportBundle() throws IOException {
+		ArtifactsLocatorImpl artifactsLocator = new ArtifactsLocatorImpl();
+		EmbeddedArtifact embeddedArtifact = artifactsLocator.loadInstallSupportBundle();
+		assertEmbeddedArtifact(embeddedArtifact, "org.apache.sling.tooling.support.install.jar");
+		assertEquals("1.1.0-SNAPSHOT", embeddedArtifact.getVersion());
+		assertEquals("org.apache.sling.tooling.support.install-1.1.0-SNAPSHOT.jar", embeddedArtifact.getName());
+	}
+
+	private void assertEmbeddedArtifact(EmbeddedArtifact embeddedArtifact, String expectedInputResourceName) throws IOException {
+		try (InputStream expectedInput = this.getClass().getClassLoader().getResourceAsStream(expectedInputResourceName);
+			InputStream actualInput = embeddedArtifact.openInputStream()) {
+			assertTrue(IOUtils.contentEquals(expectedInput, actualInput));
+		}
+	}
+}
diff --git a/shared/impl-vlt/pom.xml b/shared/impl-vlt/pom.xml
index 79b9b47f..bff3593a 100644
--- a/shared/impl-vlt/pom.xml
+++ b/shared/impl-vlt/pom.xml
@@ -66,9 +66,9 @@
 	<dependencyManagement>
 		<dependencies>
 			<dependency>
-  <groupId>commons-io</groupId>
-  <artifactId>commons-io</artifactId>
-  <version>2.11.0</version>
+			  <groupId>commons-io</groupId>
+			  <artifactId>commons-io</artifactId>
+			  <version>2.11.0</version>
 			</dependency>
 		</dependencies>
 	</dependencyManagement>
diff --git a/shared/parent/pom.xml b/shared/parent/pom.xml
index 69fef0ce..eefc3e04 100644
--- a/shared/parent/pom.xml
+++ b/shared/parent/pom.xml
@@ -133,5 +133,7 @@
 		<jackrabbit.version>2.20.6</jackrabbit.version>
         <oak.version>1.44.0</oak.version>
 		<vault.version>3.6.4</vault.version>
+		<toolingInstallVersion>1.1.0-SNAPSHOT</toolingInstallVersion>
+		<toolingSourceVersion>1.1.0-SNAPSHOT</toolingSourceVersion>
     </properties>
 </project>