This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.crankstart.launcher-1.0.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-crankstart-launcher.git
commit 3ae1a28837db5cc834682f7058e3bdc13e07461e Author: Bertrand Delacretaz <[email protected]> AuthorDate: Tue Apr 22 15:38:20 2014 +0000 Get OSGi dependencies from Maven repository as well git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/crankstart/launcher@1589176 13f79535-47bb-0310-9956-ffa450edef68 --- default.crank.txt | 31 ++++++--- pom.xml | 25 ++----- .../launcher/CrankstartFileProcessor.java | 81 ---------------------- .../org/apache/sling/crankstart/launcher/Main.java | 40 +++++++++-- .../org/apache/sling/crankstart/MavenUrlTest.java | 35 ---------- 5 files changed, 64 insertions(+), 148 deletions(-) diff --git a/default.crank.txt b/default.crank.txt index 3d581f0..7116683 100644 --- a/default.crank.txt +++ b/default.crank.txt @@ -1,21 +1,32 @@ # Minimal webconsole example for the Sling crankstart launcher -# OSGi framework properties +# Set bootstrap classpath, mvn: protocol can be used +classpath mvn:org.apache.felix/org.apache.felix.framework/4.4.0 +classpath mvn:org.osgi/org.osgi.compendium/4.2.0 +classpath mvn:org.slf4j/slf4j-api/1.6.2 +classpath mvn:org.slf4j/slf4j-simple/1.6.2 +classpath mvn:org.ops4j.pax.url/pax-url-aether/1.6.0 +classpath mvn:org.ops4j.pax.url/pax-url-commons/1.6.0 + +# Except the bootstrap launcher, crankstart jars are also provided via classpath +classpath mvn:org.apache.sling/org.apache.sling.crankstart.core/0.0.1-SNAPSHOT +classpath mvn:org.apache.sling/org.apache.sling.crankstart.api/0.0.1-SNAPSHOT + +# Set OSGi framework properties osgi.property org.osgi.service.http.port 1234 # Once OSGi properties are set, start the framework start.framework # Install a minimal set of bundles for now, just to -# demonstrate that we can start the webconsole -# Crankstart gets bundles from a Maven repository, which -# is not configurable for now. -bundle org.apache.felix/org.apache.felix.configadmin/1.2.8 -bundle org.apache.felix/org.apache.felix.http.jetty/2.2.0 -bundle org.apache.felix/org.apache.felix.metatype/1.0.4 -bundle org.apache.felix/org.apache.felix.scr/1.6.0 -bundle org.apache.felix/org.apache.felix.webconsole/3.1.6 -bundle org.apache.sling/org.apache.sling.commons.log/2.1.2 +# demonstrate that we can start the webconsole. +# mvn: protocol can be used. +bundle mvn:org.apache.felix/org.apache.felix.configadmin/1.2.8 +bundle mvn:org.apache.felix/org.apache.felix.http.jetty/2.2.0 +bundle mvn:org.apache.felix/org.apache.felix.metatype/1.0.4 +bundle mvn:org.apache.felix/org.apache.felix.scr/1.6.0 +bundle mvn:org.apache.felix/org.apache.felix.webconsole/3.1.6 +bundle mvn:org.apache.sling/org.apache.sling.commons.log/2.1.2 # Start all bundles and log a friendly message start.all.bundles diff --git a/pom.xml b/pom.xml index 54e8c79..a91b9f2 100644 --- a/pom.xml +++ b/pom.xml @@ -50,7 +50,7 @@ <goal>unpack-dependencies</goal> </goals> <configuration> - <includeGroupIds>org.osgi,org.apache.felix,org.slf4j,javax.servlet,org.ops4j.pax.url,org.apache.sling</includeGroupIds> + <includeGroupIds>org.slf4j,org.ops4j.pax.url</includeGroupIds> <excludeTransitive>false</excludeTransitive> <outputDirectory>${project.build.directory}/classes</outputDirectory> <overWriteReleases>false</overWriteReleases> @@ -85,21 +85,15 @@ </build> <dependencies> - <dependency> - <groupId>org.osgi</groupId> - <artifactId>org.osgi.compendium</artifactId> - <version>4.2.0</version> - <scope>provided</scope> - </dependency> <dependency> - <groupId>org.apache.felix</groupId> - <artifactId>org.apache.felix.framework</artifactId> - <version>4.0.0</version> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.crankstart.api</artifactId> + <version>0.0.1-SNAPSHOT</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> - <artifactId>org.apache.sling.crankstart.api</artifactId> + <artifactId>org.apache.sling.crankstart.core</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>provided</scope> </dependency> @@ -107,12 +101,13 @@ <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.2</version> + <scope>provided</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.6.2</version> - <scope>test</scope> + <scope>provided</scope> </dependency> <dependency> <groupId>org.ops4j.pax.url</groupId> @@ -126,11 +121,5 @@ <version>${pax.url.version}</version> <scope>provided</scope> </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>4.11</version> - <scope>test</scope> - </dependency> </dependencies> </project> diff --git a/src/main/java/org/apache/sling/crankstart/launcher/CrankstartFileProcessor.java b/src/main/java/org/apache/sling/crankstart/launcher/CrankstartFileProcessor.java deleted file mode 100644 index c3e6794..0000000 --- a/src/main/java/org/apache/sling/crankstart/launcher/CrankstartFileProcessor.java +++ /dev/null @@ -1,81 +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.sling.crankstart.launcher; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.Reader; -import java.util.ArrayList; -import java.util.List; - -import org.apache.sling.crankstart.api.CrankstartCommand; -import org.apache.sling.crankstart.api.CrankstartContext; -import org.apache.sling.crankstart.launcher.commands.InstallBundle; -import org.apache.sling.crankstart.launcher.commands.Log; -import org.apache.sling.crankstart.launcher.commands.SetOsgiFrameworkProperty; -import org.apache.sling.crankstart.launcher.commands.StartBundles; -import org.apache.sling.crankstart.launcher.commands.StartFramework; -import org.osgi.framework.BundleException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** Process a crankstart file */ -public class CrankstartFileProcessor { - private final CrankstartContext crankstartContext = new CrankstartContext(); - private final Logger log = LoggerFactory.getLogger(getClass()); - private List<CrankstartCommand> commands = new ArrayList<CrankstartCommand>(); - - public CrankstartFileProcessor() { - System.setProperty( "java.protocol.handler.pkgs", "org.ops4j.pax.url" ); - - commands.add(new InstallBundle()); - commands.add(new Log()); - commands.add(new SetOsgiFrameworkProperty()); - commands.add(new StartBundles()); - commands.add(new StartFramework()); - } - - public void process(Reader input) throws IOException, BundleException { - final BufferedReader r = new BufferedReader(input); - String line = null; - while((line = r.readLine()) != null) { - if(line.length() == 0 || line.startsWith("#")) { - // ignore comments and blank lines - } else { - for(CrankstartCommand c : commands) { - if(c.appliesTo(line)) { - try { - c.execute(crankstartContext, line); - } catch(Exception e) { - log.warn("Command execution failed", e); - } - break; - } - } - } - } - } - - public void waitForExit() throws InterruptedException { - if(crankstartContext.getOsgiFramework() == null) { - throw new IllegalStateException("OSGi framework not started"); - } - log.info("Waiting for OSGi framework to exit..."); - crankstartContext.getOsgiFramework().waitForStop(0); - log.info("OSGi framework exited"); - } -} diff --git a/src/main/java/org/apache/sling/crankstart/launcher/Main.java b/src/main/java/org/apache/sling/crankstart/launcher/Main.java index e858143..225d859 100644 --- a/src/main/java/org/apache/sling/crankstart/launcher/Main.java +++ b/src/main/java/org/apache/sling/crankstart/launcher/Main.java @@ -16,12 +16,23 @@ */ package org.apache.sling.crankstart.launcher; +import java.io.BufferedReader; import java.io.File; import java.io.FileReader; +import java.io.IOException; import java.io.Reader; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; + +import org.apache.sling.crankstart.api.CrankstartConstants; /** Execute a crankstart file */ public class Main { + public static final String CLASSPATH_PREFIX = "classpath "; + public static void main(String [] args) throws Exception { String crankFile = "default.crank.txt"; if(args.length < 1) { @@ -30,11 +41,32 @@ public class Main { } else { crankFile = args[0]; } - final Reader r = new FileReader(new File(crankFile)); + System.setProperty(CrankstartConstants.CRANKSTART_INPUT_FILENAME, crankFile); + System.setProperty( "java.protocol.handler.pkgs", "org.ops4j.pax.url" ); + final URL [] launcherClasspath = getClasspath(crankFile); + + final URLClassLoader launcherClassloader = new URLClassLoader(launcherClasspath, null); + final String callableClass = "org.apache.sling.crankstart.core.CrankstartFileProcessor"; + + @SuppressWarnings("unchecked") + final Callable<Object> c = (Callable<Object>)launcherClassloader.loadClass(callableClass).newInstance(); + c.call(); + } + + private static URL[] getClasspath(String filename) throws IOException { + final List<URL> urls = new ArrayList<URL>(); + final Reader input = new FileReader(new File(filename)); + final BufferedReader r = new BufferedReader(input); try { - final CrankstartFileProcessor p = new CrankstartFileProcessor(); - p.process(r); - p.waitForExit(); + String line = null; + while((line = r.readLine()) != null) { + if(line.length() == 0 || line.startsWith("#")) { + // ignore comments and blank lines + } else if(line.startsWith(CLASSPATH_PREFIX)){ + urls.add(new URL(line.substring(CLASSPATH_PREFIX.length()).trim())); + } + } + return urls.toArray(new URL[] {}); } finally { r.close(); } diff --git a/src/test/java/org/apache/sling/crankstart/MavenUrlTest.java b/src/test/java/org/apache/sling/crankstart/MavenUrlTest.java deleted file mode 100644 index ebd66bb..0000000 --- a/src/test/java/org/apache/sling/crankstart/MavenUrlTest.java +++ /dev/null @@ -1,35 +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.sling.crankstart; - -import java.io.IOException; -import java.net.URL; - -import org.junit.Test; - -public class MavenUrlTest { - @Test - public void testResolveArtifactl() throws IOException { - System.setProperty( "java.protocol.handler.pkgs", "org.ops4j.pax.url" ); - - //TODO does pax url use the default local repo? - //System.setProperty( "org.ops4j.pax.url.mvn.localRepository", localRepoPath ); - - final URL url = new URL( "mvn:commons-lang/commons-lang/1.0" ); - url.openStream().close(); - } -} -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
