Мой коллега, Том Уэтдженс, написал в блоге пост -зависимые зависимости в Maven . Он показал решение Maven, когда мы хотим включить в файл WAR зависимости, которые не используются ни в каких других областях. В этом посте мы увидим, как мы решаем эту проблему в Gradle.
Предположим, мы используем SLF4J Logging API в нашем проекте. Мы используем API как зависимость компиляции, потому что наш код использует этот API. Но в нашей тестовой среде мы хотим использовать SLF4J Simple реализацию этого API. И в нашем WAR-файле мы хотим включить реализацию API Logback. Зависимость Logback требуется только для включения в WAR-файл и не должна существовать ни в какой другой конфигурации зависимостей.
Сначала мы добавляем плагин War в наш проект. Задача war использует конфигурацию зависимостей runtime чтобы определить, какие файлы добавляются в каталог WEB-INF/lib в нашем файле WAR. Мы добавили новую конфигурацию зависимостей warLib которая расширяет конфигурацию runtime в нашем проекте.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
apply plugin: 'war'repositories.jcenter()configurations { // Create new dependency configuration // for dependencies to be added in // WAR file. warLib.extendsFrom runtime}dependencies { // API dependency for Slf4j. compile 'org.slf4j:slf4j-api:1.7.7' testCompile 'junit:junit:4.11' // Slf4j implementation used for tests. testRuntime 'org.slf4j:slf4j-simple:1.7.7' // Slf4j implementation to be packaged // in WAR file. warLib 'ch.qos.logback:logback-classic:1.1.2'}war { // Add warLib dependency configuration classpath configurations.warLib // We remove all duplicate files // with this assignment. // geFiles() method return a unique // set of File objects, removing // any duplicates from configurations // added by classpath() method. classpath = classpath.files} |
Теперь мы можем запустить задачу build и получить WAR-файл со следующим содержимым:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
$ gradle build:compileJava UP-TO-DATE:processResources UP-TO-DATE:classes UP-TO-DATE:war:assemble:compileTestJava:processTestResources UP-TO-DATE:testClasses:test:check:buildBUILD SUCCESSFULTotal time: 6.18 secs$ jar tvf build/libs/package-only-dep-example.war 0 Fri Sep 19 05:59:54 CEST 2014 META-INF/ 25 Fri Sep 19 05:59:54 CEST 2014 META-INF/MANIFEST.MF 0 Fri Sep 19 05:59:54 CEST 2014 WEB-INF/ 0 Fri Sep 19 05:59:54 CEST 2014 WEB-INF/lib/ 29257 Thu Sep 18 14:36:24 CEST 2014 WEB-INF/lib/slf4j-api-1.7.7.jar270750 Thu Sep 18 14:36:24 CEST 2014 WEB-INF/lib/logback-classic-1.1.2.jar427729 Thu Sep 18 14:36:26 CEST 2014 WEB-INF/lib/logback-core-1.1.2.jar 115 Wed Sep 03 09:24:40 CEST 2014 WEB-INF/web.xml |
Также, когда мы запускаем задачу dependencies мы можем видеть, как реализации API SLF4J связаны с конфигурациями зависимостей:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
$ gradle dependencies:dependencies------------------------------------------------------------Root project------------------------------------------------------------archives - Configuration for archive artifacts.No dependenciescompile - Compile classpath for source set 'main'.\--- org.slf4j:slf4j-api:1.7.7default - Configuration for default artifacts.\--- org.slf4j:slf4j-api:1.7.7providedCompile - Additional compile classpath for libraries that should not be part of the WAR archive.No dependenciesprovidedRuntime - Additional runtime classpath for libraries that should not be part of the WAR archive.No dependenciesruntime - Runtime classpath for source set 'main'.\--- org.slf4j:slf4j-api:1.7.7testCompile - Compile classpath for source set 'test'.+--- org.slf4j:slf4j-api:1.7.7\--- junit:junit:4.11 \--- org.hamcrest:hamcrest-core:1.3testRuntime - Runtime classpath for source set 'test'.+--- org.slf4j:slf4j-api:1.7.7+--- junit:junit:4.11| \--- org.hamcrest:hamcrest-core:1.3\--- org.slf4j:slf4j-simple:1.7.7 \--- org.slf4j:slf4j-api:1.7.7warLib+--- org.slf4j:slf4j-api:1.7.7\--- ch.qos.logback:logback-classic:1.1.2 +--- ch.qos.logback:logback-core:1.1.2 \--- org.slf4j:slf4j-api:1.7.6 -> 1.7.7(*) - dependencies omitted (listed previously)BUILD SUCCESSFULTotal time: 6.274 secs |
Код написанный с Gradle 2.1.
| Ссылка: | Gradle Good: добавление зависимостей только для упаковки в войну от нашего партнера JCG Хьюберта Иккинка в блоге JDriven . |