///////////////////////////////////////////////////////////////
 * 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.
///////////////////////////////////////////////////////////////

THIS FILE CONTAINS SNIPPETS for quick-start.txt and shell.txt. DO NOT INCLUDE IN DOCUMENTATION.


START SNIPPET: boot-quick
wget http://zest.apache.org/latest/shell/zest-boot
sh zest-boot
END SNIPPET: boot-quick

START SNIPPET: boot-sdk
wget http://zest.apache.org/latest/shell/zest-boot
sh zest-boot sdk
END SNIPPET: boot-sdk

START SNIPPET: create-singleton
zest create-project singleton com.acme.quick quickstart
cd quickstart
./gradlew assemble
./gradlew run
END SNIPPET: create-singleton

START SNIPPET: create-ngheroes
zest create-project ng-heroes com.acme.heroes heroes
cd heroes
./gradlew assemble
./gradlew run
END SNIPPET: create-ngheroes

