;
; 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.
;

(defproject compute-clojure "1.0.0.0"
  :description "Clojure compute examples"
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [org.clojure/tools.logging "0.2.3"]
                 [org.clojure/core.incubator "0.1.0"]
                 [org.jclouds/jclouds-allcompute "1.6.0"]
                 [org.jclouds/driver/jclouds-sshj "1.6.0"]
                 [org.jclouds/labs/joyentcloud "1.6.0"]
                 [org.jclouds/driver/jclouds-slf4j "1.6.0"]
                 [ch.qos.logback/logback-classic "1.0.0"]])
