├── src └── leiningen │ └── new │ ├── reloaded │ └── templates │ │ ├── main.clj │ │ ├── main_test.clj │ │ ├── gitignore │ │ ├── CHANGELOG.md │ │ ├── project.clj │ │ ├── user.clj │ │ ├── README.md │ │ └── dev.clj │ └── reloaded.clj ├── .gitignore ├── project.clj ├── CHANGELOG.md ├── README.md └── epl-v10.html /src/leiningen/new/reloaded/templates/main.clj: -------------------------------------------------------------------------------- 1 | (ns {{main-ns}}) 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/leiningen/new/reloaded/templates/main_test.clj: -------------------------------------------------------------------------------- 1 | (ns {{main-ns}}-test 2 | (:require 3 | [clojure.test :refer [deftest is]] 4 | [{{main-ns}}])) 5 | 6 | 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /lib 3 | /classes 4 | /checkouts 5 | pom.xml 6 | pom.xml.asc 7 | *.jar 8 | *.class 9 | .lein-deps-sum 10 | .lein-failures 11 | .lein-plugins 12 | .lein-repl-history 13 | -------------------------------------------------------------------------------- /src/leiningen/new/reloaded/templates/gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | profiles.clj 5 | pom.xml 6 | pom.xml.asc 7 | *.jar 8 | *.class 9 | /.lein-* 10 | /.nrepl-port 11 | /.prepl-port 12 | -------------------------------------------------------------------------------- /src/leiningen/new/reloaded/templates/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | This format is based on [Keep a Changelog](http://keepachangelog.com/) 4 | 5 | 6 | ## [Unreleased] 7 | 8 | ### Added 9 | 10 | ### Changed 11 | 12 | ### Deprecated 13 | 14 | ### Removed 15 | 16 | ### Fixed 17 | 18 | ### Security 19 | 20 | 21 | [Unreleased]: https://TODO 22 | -------------------------------------------------------------------------------- /project.clj: -------------------------------------------------------------------------------- 1 | (defproject reloaded/lein-template "1.2.1-SNAPSHOT" 2 | :description "A Leiningen 2 template to generate project skeletons using 3 | tools.namespace and a :dev profile with a dev.clj file." 4 | :url "https://github.com/stuartsierra/reloaded" 5 | :license {:name "Eclipse Public License" 6 | :url "http://www.eclipse.org/legal/epl-v10.html"} 7 | :deploy-repositories [["releases" :clojars]] 8 | :eval-in-leiningen true) 9 | -------------------------------------------------------------------------------- /src/leiningen/new/reloaded/templates/project.clj: -------------------------------------------------------------------------------- 1 | (defproject {{full-name}} "0.1.0-SNAPSHOT" 2 | :description "TODO" 3 | :url "TODO" 4 | :license {:name "TODO: Choose a license" 5 | :url "http://choosealicense.com/"} 6 | :dependencies [[org.clojure/clojure "1.12.3"] 7 | [com.stuartsierra/component "1.2.0"]] 8 | :profiles {:dev {:dependencies [[org.clojure/tools.namespace "1.5.0"] 9 | [com.stuartsierra/component.repl "1.0.0"]] 10 | :source-paths ["dev"]}}) 11 | -------------------------------------------------------------------------------- /src/leiningen/new/reloaded/templates/user.clj: -------------------------------------------------------------------------------- 1 | (ns user 2 | "Utility functions to rapidly bootstrap the REPL for interactive 3 | development. This file is automatically loaded by Clojure on 4 | startup. 5 | 6 | Run `(go)` to load all source code, start the component system 7 | running, and switch to the `dev` namespace. `(reset)` is an alias 8 | for `(go)`. 9 | 10 | Or run `(dev)` to just load code and switch to `dev` without 11 | starting the system." 12 | (:require 13 | [com.stuartsierra.component.user-helpers :refer [dev go reset]])) 14 | -------------------------------------------------------------------------------- /src/leiningen/new/reloaded/templates/README.md: -------------------------------------------------------------------------------- 1 | # {{full-name}} 2 | 3 | TODO: Brief description 4 | 5 | 6 | 7 | ## Releases and Dependency Information 8 | 9 | * Releases are published to TODO_LINK 10 | 11 | * Latest stable release is TODO_LINK 12 | 13 | * All released versions TODO_LINK 14 | 15 | [Leiningen] dependency information: 16 | 17 | [{{full-name}} "0.1.0-SNAPSHOT"] 18 | 19 | [deps.edn] dependency information: 20 | 21 | {{full-name}} {:mvn/version "0.1.0-SNAPSHOT"} 22 | 23 | [Maven] dependency information: 24 | 25 | 26 | {{groupId}} 27 | {{artifactId}} 28 | 0.1.0-SNAPSHOT 29 | 30 | 31 | [Leiningen]: http://leiningen.org/ 32 | [deps.edn]: http://www.gradle.org/ 33 | [Maven]: http://maven.apache.org/ 34 | 35 | 36 | 37 | ## Usage 38 | 39 | TODO 40 | 41 | 42 | 43 | ## Change Log 44 | 45 | * Version 0.1.0-SNAPSHOT 46 | 47 | 48 | 49 | ## Copyright and License 50 | 51 | Copyright © {{year}} TODO_INSERT_NAME 52 | 53 | TODO: [Choose a license](http://choosealicense.com/) 54 | -------------------------------------------------------------------------------- /src/leiningen/new/reloaded/templates/dev.clj: -------------------------------------------------------------------------------- 1 | (ns dev 2 | "Tools for interactive development with the REPL. This file should 3 | not be included in a production build of the application. 4 | 5 | Call `(reset)` to reload modified code and (re)start the system. 6 | 7 | The system under development is `system`, referred from 8 | `com.stuartsierra.component.repl/system`. 9 | 10 | See also https://github.com/stuartsierra/component.repl" 11 | (:require 12 | [clojure.java.io :as io] 13 | [clojure.java.javadoc :refer [javadoc]] 14 | [clojure.pprint :refer [pprint]] 15 | [clojure.reflect :refer [reflect]] 16 | [clojure.repl :refer [apropos dir doc find-doc pst source]] 17 | [clojure.set :as set] 18 | [clojure.string :as string] 19 | [clojure.test :as test] 20 | [clojure.tools.namespace.repl :refer [refresh refresh-all clear]] 21 | [com.stuartsierra.component :as component] 22 | [com.stuartsierra.component.repl :refer [reset set-init start stop system]] 23 | [{{main-ns}}])) 24 | 25 | ;; Do not try to load source code from 'resources' directory 26 | (clojure.tools.namespace.repl/set-refresh-dirs "dev" "src" "test") 27 | 28 | (defn dev-system 29 | "Constructs a system map suitable for interactive development." 30 | [] 31 | (component/system-map 32 | ;; TODO 33 | )) 34 | 35 | (set-init (fn [_] (dev-system))) 36 | -------------------------------------------------------------------------------- /src/leiningen/new/reloaded.clj: -------------------------------------------------------------------------------- 1 | (ns leiningen.new.reloaded 2 | (:require [clojure.string :as str]) 3 | (:use [leiningen.new.templates :only [renderer name-to-path ->files 4 | sanitize-ns project-name year]])) 5 | 6 | (def render (renderer "reloaded/templates")) 7 | 8 | (defn reloaded 9 | "Project with tools.namespace, profiles, and user.clj 10 | 11 | This template generates a project skeleton using tools.namespace and 12 | a :dev profile containing a dev.clj file. It is based on the blog 13 | article \"My Clojure Workflow, Reloaded\" at 14 | http://thinkrelevance.com/blog/2013/06/04/clojure-workflow-reloaded 15 | 16 | The only argument is a project name. The recommended form for a 17 | project name is groupId/artifactId where groupId is a reversed domain 18 | name that you own and artifactId is a descriptive name for the 19 | project. Names without a groupId are also accepted." 20 | [name] 21 | (let [[groupId artifactId] (str/split name #"/" 2) 22 | artifactId (or artifactId groupId)] 23 | (println "Generating a project in directory" artifactId) 24 | (let [data {:full-name name 25 | :groupId groupId 26 | :artifactId artifactId 27 | :name artifactId ; used by ->files 28 | :year (year) 29 | :main-ns (sanitize-ns name) 30 | :path (name-to-path name)}] 31 | (->files data 32 | [".gitignore" (render "gitignore")] 33 | ["README.md" (render "README.md" data)] 34 | ["CHANGELOG.md" (render "CHANGELOG.md" data)] 35 | ["project.clj" (render "project.clj" data)] 36 | ["src/{{path}}.clj" (render "main.clj" data)] 37 | ["test/{{path}}_test.clj" (render "main_test.clj" data)] 38 | ["dev/dev.clj" (render "dev.clj" data)] 39 | ["dev/user.clj" (render "user.clj" data)])))) 40 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). 6 | 7 | ## Unreleased 8 | 9 | [Commits since last release](https://github.com/stuartsierra/reloaded/compare/1.2.0...HEAD) 10 | 11 | ## [1.2.0] - 2025-10-25 12 | 13 | ### Changed 14 | 15 | * Update Clojure to 1.12.3 16 | 17 | * Update [Component] to 1.2.0 18 | 19 | * Update [tools.namespace] to 1.5.0 20 | 21 | * Add [deps.edn] dependency information in the README template 22 | 23 | ## [1.1.0] - 2022-03-23 24 | 25 | ### Changed 26 | 27 | * Update Clojure to 1.11.0 28 | 29 | ## [1.0.1] - 2022-03-23 30 | 31 | ### Fixed 32 | 33 | * Fixed missing `.gitignore` in the release artifact 34 | 35 | ## [1.0.0] - 2022-03-23 36 | 37 | ### Changed 38 | 39 | * Update [Component] to 1.1.0 40 | 41 | * Update [tools.namespace] to 1.2.0 42 | 43 | * Update [component.repl] to 1.0.0 44 | 45 | ## [0.5.0] - 2017-03-12 46 | 47 | ### Changed 48 | 49 | * Update [component.repl] to 0.2.0 50 | 51 | * Refer `user-helpers` from component.repl instead of inline 52 | definitions in `user.clj` 53 | 54 | ## [0.4.0] - 2017-03-01 55 | 56 | ### Added 57 | 58 | * Add test directory to created project 59 | 60 | * Add CHANGELOG to created project 61 | 62 | ## [0.3.1] - 2017-02-27 63 | 64 | ### Fixed 65 | 66 | * Fixed: `dev` requires `clojure.tools.logging` but it is not a dependency 67 | 68 | ## (BROKEN) [0.3.0] - 2017-02-27 69 | 70 | ### Changes 71 | 72 | * Use [component.repl] 73 | 74 | ## [0.2.1] - 2015-09-19 75 | 76 | ### Fixes 77 | 78 | * Fix mis-named `go` symbol in `dev` namespace 79 | 80 | ## (BROKEN) [0.2.0] - 2015-09-19 81 | 82 | ### Changes 83 | 84 | * Move start/stop functions into `dev` namespace 85 | 86 | * Update [tools.namespace] & Clojure versions 87 | 88 | ## [0.1.3] - 2014-10-04 89 | 90 | ### Changes 91 | 92 | * Update [tools.namespace] dependency in template 93 | 94 | ## [0.1.2] - 2014-07-18 95 | 96 | ### Changes 97 | 98 | * Update Clojure & [tools.namespace] dependencies in template 99 | 100 | ## [0.1.1] - 2013-10-21 101 | 102 | ### Changes 103 | 104 | * Do not assume EPL or any other license in generated project 105 | 106 | ## [0.1.0] - 2013-08-05 107 | 108 | First release. 109 | 110 | [tools.namespace]: https://github.com/clojure/tools.namespace 111 | [Component]: https://github.com/stuartsierra/component 112 | [component.repl]: https://github.com/stuartsierra/component.repl 113 | [deps.edn]: http://www.gradle.org/ 114 | 115 | [1.2.0]: https://clojars.org/reloaded/lein-template/versions/1.2.0 116 | [1.1.0]: https://clojars.org/reloaded/lein-template/versions/1.1.0 117 | [1.0.1]: https://clojars.org/reloaded/lein-template/versions/1.0.1 118 | [1.0.0]: https://clojars.org/reloaded/lein-template/versions/1.0.0 119 | [0.5.0]: https://clojars.org/reloaded/lein-template/versions/0.5.0 120 | [0.4.0]: https://clojars.org/reloaded/lein-template/versions/0.4.0 121 | [0.3.1]: https://clojars.org/reloaded/lein-template/versions/0.3.1 122 | [0.3.0]: https://clojars.org/reloaded/lein-template/versions/0.3.0 123 | [0.2.1]: https://clojars.org/reloaded/lein-template/versions/0.2.1 124 | [0.2.0]: https://clojars.org/reloaded/lein-template/versions/0.2.0 125 | [0.1.3]: https://clojars.org/reloaded/lein-template/versions/0.1.3 126 | [0.1.2]: https://clojars.org/reloaded/lein-template/versions/0.1.2 127 | [0.1.1]: https://clojars.org/reloaded/lein-template/versions/0.1.1 128 | [0.1.0]: https://clojars.org/reloaded/lein-template/versions/0.1.0 129 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # reloaded 2 | 3 | A Leiningen 2 template to generate project skeletons using 4 | [tools.namespace], [Component], and [component.repl]. 5 | 6 | This template is based on the blog article [My Clojure Workflow, Reloaded]. 7 | 8 | 9 | [tools.namespace]: https://github.com/clojure/tools.namespace 10 | [Component]: https://github.com/stuartsierra/component 11 | [component.repl]: https://github.com/stuartsierra/component.repl 12 | [My Clojure Workflow, Reloaded]: http://thinkrelevance.com/blog/2013/06/04/clojure-workflow-reloaded 13 | 14 | 15 | ## Releases and Dependency Information 16 | 17 | This template requires [Leiningen] 2. 18 | 19 | I publish releases to [Clojars]. 20 | 21 | Current release is 1.2.0 22 | 23 | No installation is necessary; Leiningen should automatically discover 24 | and download the template. 25 | 26 | [Leiningen]: http://leiningen.org/ 27 | [Clojars]: http://clojars.org/ 28 | 29 | 30 | ## Quick Start 31 | 32 | In your shell: 33 | 34 | ```shell 35 | lein new reloaded com.example/my-project 36 | cd my-project 37 | lein repl 38 | ``` 39 | 40 | At the REPL prompt: 41 | 42 | ```clojure 43 | (go) 44 | ``` 45 | 46 | This will load and switch to the `dev` namespace. 47 | 48 | As you work, reload/restart your system from the `dev` namespace: 49 | 50 | ``` 51 | (reset) 52 | ``` 53 | 54 | Edit `dev/dev.clj`. Define a constructor for your application in the 55 | placeholder in `dev-system`. 56 | 57 | 58 | ## Details 59 | 60 | Run `lein new reloaded com.example/new-project` to generate a new 61 | project skeleton in the `new-project` directory, with a structure like 62 | this: 63 | 64 | . 65 | ├── README.md 66 | ├── project.clj 67 | ├── dev 68 | │   └── dev.clj 69 | │   └── user.clj 70 | └── src 71 | └── com 72 | └── example 73 | └── new_project.clj 74 | 75 | The `src` directory contains your application source files. 76 | 77 | The `dev` directory contains files that you will use only during 78 | interactive development, including: 79 | 80 | * `dev.clj`, with template functions to create your application. 81 | 82 | * `user.clj`, loaded automatically by Clojure at startup. 83 | 84 | These files will not be packaged in the JAR files created by `lein 85 | jar` or `lein uberjar`. 86 | 87 | The `user` namespace refers the `go`, `reset`, and `dev` symbols from 88 | the `com.stuartsierra.component.user-helpers` namespace, which is 89 | packaged with [component.repl]. In user-helpers, `reset` is just an 90 | alias for `go`, so that you can use type the same thing regardless of 91 | whether the REPL is in `user` or `dev`. 92 | 93 | The `dev` namespace refers common Clojure utilities and the `reset`, 94 | `start`, `stop`, and `system` symbols from the 95 | `com.stuartsierra.component.repl` namespace. 96 | 97 | 98 | See [component.repl] and the [original article] for explanations of 99 | how I use these files to develop an application. Note: The article was 100 | written before the existence of [Component] and [component.repl]. 101 | 102 | [original article]: http://thinkrelevance.com/blog/2013/06/04/clojure-workflow-reloaded 103 | 104 | 105 | ## Change Log 106 | 107 | See [CHANGELOG.md](CHANGELOG.md) 108 | 109 | 110 | ## Forking 111 | 112 | I created this template for my own personal use, and I am publishing 113 | it in the hopes that others will find it useful. I encourage you to 114 | fork and modify this template to suit your own needs and personal 115 | workflow, but I am unlikely to merge any changes into this repository. 116 | 117 | 118 | ## Copyright and License 119 | 120 | Copyright © 2013-2017 Stuart Sierra. All rights reserved. The use and 121 | distribution terms for this software are covered by the 122 | [Eclipse Public License 1.0] which can be found in the file 123 | epl-v10.html at the root of this distribution. By using this software 124 | in any fashion, you are agreeing to be bound by the terms of this 125 | license. You must not remove this notice, or any other, from this 126 | software. 127 | 128 | [Eclipse Public License 1.0]: http://opensource.org/licenses/eclipse-1.0.php 129 | -------------------------------------------------------------------------------- /epl-v10.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Eclipse Public License - Version 1.0 6 | 23 | 24 | 25 | 26 | 27 | 28 |

Eclipse Public License - v 1.0

29 | 30 |

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE 31 | PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR 32 | DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS 33 | AGREEMENT.

34 | 35 |

1. DEFINITIONS

36 | 37 |

"Contribution" means:

38 | 39 |

a) in the case of the initial Contributor, the initial 40 | code and documentation distributed under this Agreement, and

41 |

b) in the case of each subsequent Contributor:

42 |

i) changes to the Program, and

43 |

ii) additions to the Program;

44 |

where such changes and/or additions to the Program 45 | originate from and are distributed by that particular Contributor. A 46 | Contribution 'originates' from a Contributor if it was added to the 47 | Program by such Contributor itself or anyone acting on such 48 | Contributor's behalf. Contributions do not include additions to the 49 | Program which: (i) are separate modules of software distributed in 50 | conjunction with the Program under their own license agreement, and (ii) 51 | are not derivative works of the Program.

52 | 53 |

"Contributor" means any person or entity that distributes 54 | the Program.

55 | 56 |

"Licensed Patents" mean patent claims licensable by a 57 | Contributor which are necessarily infringed by the use or sale of its 58 | Contribution alone or when combined with the Program.

59 | 60 |

"Program" means the Contributions distributed in accordance 61 | with this Agreement.

62 | 63 |

"Recipient" means anyone who receives the Program under 64 | this Agreement, including all Contributors.

65 | 66 |

2. GRANT OF RIGHTS

67 | 68 |

a) Subject to the terms of this Agreement, each 69 | Contributor hereby grants Recipient a non-exclusive, worldwide, 70 | royalty-free copyright license to reproduce, prepare derivative works 71 | of, publicly display, publicly perform, distribute and sublicense the 72 | Contribution of such Contributor, if any, and such derivative works, in 73 | source code and object code form.

74 | 75 |

b) Subject to the terms of this Agreement, each 76 | Contributor hereby grants Recipient a non-exclusive, worldwide, 77 | royalty-free patent license under Licensed Patents to make, use, sell, 78 | offer to sell, import and otherwise transfer the Contribution of such 79 | Contributor, if any, in source code and object code form. This patent 80 | license shall apply to the combination of the Contribution and the 81 | Program if, at the time the Contribution is added by the Contributor, 82 | such addition of the Contribution causes such combination to be covered 83 | by the Licensed Patents. The patent license shall not apply to any other 84 | combinations which include the Contribution. No hardware per se is 85 | licensed hereunder.

86 | 87 |

c) Recipient understands that although each Contributor 88 | grants the licenses to its Contributions set forth herein, no assurances 89 | are provided by any Contributor that the Program does not infringe the 90 | patent or other intellectual property rights of any other entity. Each 91 | Contributor disclaims any liability to Recipient for claims brought by 92 | any other entity based on infringement of intellectual property rights 93 | or otherwise. As a condition to exercising the rights and licenses 94 | granted hereunder, each Recipient hereby assumes sole responsibility to 95 | secure any other intellectual property rights needed, if any. For 96 | example, if a third party patent license is required to allow Recipient 97 | to distribute the Program, it is Recipient's responsibility to acquire 98 | that license before distributing the Program.

99 | 100 |

d) Each Contributor represents that to its knowledge it 101 | has sufficient copyright rights in its Contribution, if any, to grant 102 | the copyright license set forth in this Agreement.

103 | 104 |

3. REQUIREMENTS

105 | 106 |

A Contributor may choose to distribute the Program in object code 107 | form under its own license agreement, provided that:

108 | 109 |

a) it complies with the terms and conditions of this 110 | Agreement; and

111 | 112 |

b) its license agreement:

113 | 114 |

i) effectively disclaims on behalf of all Contributors 115 | all warranties and conditions, express and implied, including warranties 116 | or conditions of title and non-infringement, and implied warranties or 117 | conditions of merchantability and fitness for a particular purpose;

118 | 119 |

ii) effectively excludes on behalf of all Contributors 120 | all liability for damages, including direct, indirect, special, 121 | incidental and consequential damages, such as lost profits;

122 | 123 |

iii) states that any provisions which differ from this 124 | Agreement are offered by that Contributor alone and not by any other 125 | party; and

126 | 127 |

iv) states that source code for the Program is available 128 | from such Contributor, and informs licensees how to obtain it in a 129 | reasonable manner on or through a medium customarily used for software 130 | exchange.

131 | 132 |

When the Program is made available in source code form:

133 | 134 |

a) it must be made available under this Agreement; and

135 | 136 |

b) a copy of this Agreement must be included with each 137 | copy of the Program.

138 | 139 |

Contributors may not remove or alter any copyright notices contained 140 | within the Program.

141 | 142 |

Each Contributor must identify itself as the originator of its 143 | Contribution, if any, in a manner that reasonably allows subsequent 144 | Recipients to identify the originator of the Contribution.

145 | 146 |

4. COMMERCIAL DISTRIBUTION

147 | 148 |

Commercial distributors of software may accept certain 149 | responsibilities with respect to end users, business partners and the 150 | like. While this license is intended to facilitate the commercial use of 151 | the Program, the Contributor who includes the Program in a commercial 152 | product offering should do so in a manner which does not create 153 | potential liability for other Contributors. Therefore, if a Contributor 154 | includes the Program in a commercial product offering, such Contributor 155 | ("Commercial Contributor") hereby agrees to defend and 156 | indemnify every other Contributor ("Indemnified Contributor") 157 | against any losses, damages and costs (collectively "Losses") 158 | arising from claims, lawsuits and other legal actions brought by a third 159 | party against the Indemnified Contributor to the extent caused by the 160 | acts or omissions of such Commercial Contributor in connection with its 161 | distribution of the Program in a commercial product offering. The 162 | obligations in this section do not apply to any claims or Losses 163 | relating to any actual or alleged intellectual property infringement. In 164 | order to qualify, an Indemnified Contributor must: a) promptly notify 165 | the Commercial Contributor in writing of such claim, and b) allow the 166 | Commercial Contributor to control, and cooperate with the Commercial 167 | Contributor in, the defense and any related settlement negotiations. The 168 | Indemnified Contributor may participate in any such claim at its own 169 | expense.

170 | 171 |

For example, a Contributor might include the Program in a commercial 172 | product offering, Product X. That Contributor is then a Commercial 173 | Contributor. If that Commercial Contributor then makes performance 174 | claims, or offers warranties related to Product X, those performance 175 | claims and warranties are such Commercial Contributor's responsibility 176 | alone. Under this section, the Commercial Contributor would have to 177 | defend claims against the other Contributors related to those 178 | performance claims and warranties, and if a court requires any other 179 | Contributor to pay any damages as a result, the Commercial Contributor 180 | must pay those damages.

181 | 182 |

5. NO WARRANTY

183 | 184 |

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS 185 | PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 186 | OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, 187 | ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY 188 | OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely 189 | responsible for determining the appropriateness of using and 190 | distributing the Program and assumes all risks associated with its 191 | exercise of rights under this Agreement , including but not limited to 192 | the risks and costs of program errors, compliance with applicable laws, 193 | damage to or loss of data, programs or equipment, and unavailability or 194 | interruption of operations.

195 | 196 |

6. DISCLAIMER OF LIABILITY

197 | 198 |

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT 199 | NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, 200 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING 201 | WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF 202 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 203 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR 204 | DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED 205 | HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

206 | 207 |

7. GENERAL

208 | 209 |

If any provision of this Agreement is invalid or unenforceable under 210 | applicable law, it shall not affect the validity or enforceability of 211 | the remainder of the terms of this Agreement, and without further action 212 | by the parties hereto, such provision shall be reformed to the minimum 213 | extent necessary to make such provision valid and enforceable.

214 | 215 |

If Recipient institutes patent litigation against any entity 216 | (including a cross-claim or counterclaim in a lawsuit) alleging that the 217 | Program itself (excluding combinations of the Program with other 218 | software or hardware) infringes such Recipient's patent(s), then such 219 | Recipient's rights granted under Section 2(b) shall terminate as of the 220 | date such litigation is filed.

221 | 222 |

All Recipient's rights under this Agreement shall terminate if it 223 | fails to comply with any of the material terms or conditions of this 224 | Agreement and does not cure such failure in a reasonable period of time 225 | after becoming aware of such noncompliance. If all Recipient's rights 226 | under this Agreement terminate, Recipient agrees to cease use and 227 | distribution of the Program as soon as reasonably practicable. However, 228 | Recipient's obligations under this Agreement and any licenses granted by 229 | Recipient relating to the Program shall continue and survive.

230 | 231 |

Everyone is permitted to copy and distribute copies of this 232 | Agreement, but in order to avoid inconsistency the Agreement is 233 | copyrighted and may only be modified in the following manner. The 234 | Agreement Steward reserves the right to publish new versions (including 235 | revisions) of this Agreement from time to time. No one other than the 236 | Agreement Steward has the right to modify this Agreement. The Eclipse 237 | Foundation is the initial Agreement Steward. The Eclipse Foundation may 238 | assign the responsibility to serve as the Agreement Steward to a 239 | suitable separate entity. Each new version of the Agreement will be 240 | given a distinguishing version number. The Program (including 241 | Contributions) may always be distributed subject to the version of the 242 | Agreement under which it was received. In addition, after a new version 243 | of the Agreement is published, Contributor may elect to distribute the 244 | Program (including its Contributions) under the new version. Except as 245 | expressly stated in Sections 2(a) and 2(b) above, Recipient receives no 246 | rights or licenses to the intellectual property of any Contributor under 247 | this Agreement, whether expressly, by implication, estoppel or 248 | otherwise. All rights in the Program not expressly granted under this 249 | Agreement are reserved.

250 | 251 |

This Agreement is governed by the laws of the State of New York and 252 | the intellectual property laws of the United States of America. No party 253 | to this Agreement will bring a legal action under this Agreement more 254 | than one year after the cause of action arose. Each party waives its 255 | rights to a jury trial in any resulting litigation.

256 | 257 | 258 | 259 | --------------------------------------------------------------------------------