1# Dagger 2 2 3[![Maven Central][mavenbadge-svg]][mavencentral] 4 5A fast dependency injector for Android and Java. 6 7## About Google's Fork 8 9Dagger 2 is a compile-time evolution approach to dependency injection. 10Taking the approach started in Dagger 1.x to its ultimate conclusion, 11Dagger 2.x eliminates all reflection, and improves code clarity by 12removing the traditional ObjectGraph/Injector in favor of user-specified 13`@Component` interfaces. 14 15This github project represents the Dagger 2 development stream. The earlier 16[project page][square] (Square, Inc's repository) represents the earlier 1.0 17development stream. Both versions have benefited from strong involvement from 18Square, Google, and other contributors. 19 20Dagger is currently in active development, primarily internally at Google, 21with regular pushes to the open-source community. Snapshot releases are 22auto-deployed to sonatype's central maven repository on every clean build with 23the version `HEAD-SNAPSHOT`. 24 25> [Dagger 2's main documentation website can be found here.][website] 26 27## Documentation 28 29You can [find the dagger documentation here][website] which has extended usage 30instructions and other useful information. Substantial usage information can be 31found in the [API documentation][20api]. 32 33You can also learn more from [the original proposal][proposal], 34[this talk by Greg Kick][gaktalk], and on the dagger-discuss@googlegroups.com 35mailing list. 36 37## Installation 38 39### Bazel 40 41If you build with `bazel`, follow the [`bazel` documentation for referencing 42external projects][bazel-external-deps] to include Dagger in your build. 43 44Given the following `WORKSPACE` definition, you can reference dagger via 45`@com_google_dagger//:dagger_with_compiler` in your deps. 46 47```python 48http_archive( 49 name = "com_google_dagger", 50 urls = ["https://github.com/google/dagger/archive/dagger-<version>.zip"], 51) 52``` 53 54### Other build systems 55 56You will need to include the `dagger-2.x.jar` in your application's runtime. 57In order to activate code generation and generate implementations to manage 58your graph you will need to include `dagger-compiler-2.x.jar` in your build 59at compile time. 60 61#### Maven 62 63In a Maven project, include the `dagger` artifact in the dependencies section 64of your `pom.xml` and the `dagger-compiler` artifact as an 65`annotationProcessorPaths` value of the `maven-compiler-plugin`: 66 67```xml 68<dependencies> 69 <dependency> 70 <groupId>com.google.dagger</groupId> 71 <artifactId>dagger</artifactId> 72 <version>2.x</version> 73 </dependency> 74</dependencies> 75<build> 76 <plugins> 77 <plugin> 78 <groupId>org.apache.maven.plugins</groupId> 79 <artifactId>maven-compiler-plugin</artifactId> 80 <version>3.6.1</version> 81 <configuration> 82 <annotationProcessorPaths> 83 <path> 84 <groupId>com.google.dagger</groupId> 85 <artifactId>dagger-compiler</artifactId> 86 <version>2.x</version> 87 </path> 88 </annotationProcessorPaths> 89 </configuration> 90 </plugin> 91 </plugins> 92</build> 93``` 94 95If you are using a version of the `maven-compiler-plugin` lower than `3.5`, add 96the `dagger-compiler` artifact with the `provided` scope: 97 98```xml 99<dependencies> 100 <dependency> 101 <groupId>com.google.dagger</groupId> 102 <artifactId>dagger</artifactId> 103 <version>2.x</version> 104 </dependency> 105 <dependency> 106 <groupId>com.google.dagger</groupId> 107 <artifactId>dagger-compiler</artifactId> 108 <version>2.x</version> 109 <scope>provided</scope> 110 </dependency> 111</dependencies> 112``` 113 114If you use the beta `dagger-producers` extension (which supplies 115parallelizable execution graphs), then add this to your maven configuration: 116 117```xml 118<dependencies> 119 <dependency> 120 <groupId>com.google.dagger</groupId> 121 <artifactId>dagger-producers</artifactId> 122 <version>2.x</version> 123 </dependency> 124</dependencies> 125``` 126 127#### Java Gradle 128```groovy 129// Add plugin https://plugins.gradle.org/plugin/net.ltgt.apt 130plugins { 131 id "net.ltgt.apt" version "0.10" 132} 133 134// Add Dagger dependencies 135dependencies { 136 compile 'com.google.dagger:dagger:2.x' 137 apt 'com.google.dagger:dagger-compiler:2.x' 138} 139``` 140 141#### Android Gradle 142```groovy 143// Add Dagger dependencies 144dependencies { 145 compile 'com.google.dagger:dagger:2.x' 146 annotationProcessor 'com.google.dagger:dagger-compiler:2.x' 147} 148``` 149 150If you're using classes in `dagger.android` you'll also want to include: 151 152```groovy 153compile 'com.google.dagger:dagger-android:2.x' 154compile 'com.google.dagger:dagger-android-support:2.x' // if you use the support libraries 155annotationProcessor 'com.google.dagger:dagger-android-processor:2.x' 156``` 157 158If you're using a version of the Android gradle plugin below `2.2`, see 159https://bitbucket.org/hvisser/android-apt. 160 161If you're using the [Android Databinding library][databinding], you may want to 162increase the number of errors that `javac` will print. When Dagger prints an 163error, databinding compilation will halt and sometimes print more than 100 164errors, which is the default amount for `javac`. For more information, see 165[Issue 306](https://github.com/google/dagger/issues/306). 166 167```groovy 168gradle.projectsEvaluated { 169 tasks.withType(JavaCompile) { 170 options.compilerArgs << "-Xmaxerrs" << "500" // or whatever number you want 171 } 172} 173``` 174 175### Download 176 177 * 2.x (google/dagger) 178 * [Dagger 2.0 Documentation][website] 179 * [Dagger 2.0 Javadocs][20api] 180 * [Dagger development Javadocs][latestapi] (from the `master` branch 181 on GitHub) 182 * [Google's Dagger project site on GitHub][project] 183 * 1.x (square/dagger) 184 * [Square's original Dagger project site on GitHub][square] 185 186 187If you do not use maven, gradle, ivy, or other build systems that consume 188maven-style binary artifacts, they can be downloaded directly via the 189[Maven Central Repository][mavencentral]. 190 191Developer snapshots are available from Sonatype's 192[snapshot repository][dagger-snap], and are built on a clean build of 193the GitHub project's master branch. 194 195## Building Dagger 196 197See [the CONTRIBUTING.md docs][Building Dagger]. 198 199## License 200 201 Copyright 2012 The Dagger Authors 202 203 Licensed under the Apache License, Version 2.0 (the "License"); 204 you may not use this file except in compliance with the License. 205 You may obtain a copy of the License at 206 207 http://www.apache.org/licenses/LICENSE-2.0 208 209 Unless required by applicable law or agreed to in writing, software 210 distributed under the License is distributed on an "AS IS" BASIS, 211 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 212 See the License for the specific language governing permissions and 213 limitations under the License. 214 215[20api]: https://dagger.dev/api/2.0/ 216[`bazel`]: https://bazel.build 217[bazel-external-deps]: https://docs.bazel.build/versions/master/external.html#depending-on-other-bazel-projects 218[Building Dagger]: CONTRIBUTING.md#building-dagger 219[dagger-snap]: https://oss.sonatype.org/content/repositories/snapshots/com/google/dagger/ 220[databinding]: https://developer.android.com/topic/libraries/data-binding/ 221[gaktalk]: https://www.youtube.com/watch?v=oK_XtfXPkqw 222[latestapi]: https://dagger.dev/api/latest/ 223[mavenbadge-svg]: https://maven-badges.herokuapp.com/maven-central/com.google.dagger/dagger/badge.svg 224[mavencentral]: https://search.maven.org/artifact/com.google.dagger/dagger 225[project]: http://github.com/google/dagger/ 226[proposal]: https://github.com/square/dagger/issues/366 227[square]: http://github.com/square/dagger/ 228[website]: https://dagger.dev 229