Giriş
Gradle ile herhangi bir plugin kullanmazsak toplam 4 tane dependency tipi geliyor. Şeklen şöyle
compile, runtime, testCompile, testRuntime kullanılmamalı. Açıklaması şöyle.
The usage of the compile and runtime configurations in the Java ecosystem plugins has been discouraged since Gradle 3.4.
...
Other sources sets create similar configurations (e.g. testCompile and testRuntime for the test source set), should not be used either.
provided kullanılmamalı, yerine compileOnly geldi. Açıklaması şöyle.
compileOnly is the replacement — the equivalent configuration that is being deprecated is provided
providedCompile ve providedRuntime
war plugin ile geliyor
1. api
Açıklaması şöyle. Maven'daki compile scope gibi
api (same as compile it also leaks(exposes) dependencies to the consumer’s compile-classpath)
api için yeni bir plugin eklemek gerekiyor. Şöyle yaparız
plugins {id 'java-library'}
2. compileOnly - Örneğin Lombok, javaee-api İçin
Açıklaması şöyle. Derlemeye dahil edilir ancak çıktıya dahil edilmez. Sanırım Maven' deki provided anlamına geliyor.
3. runtimeOnlyDependencies whose API is required at compile time but whose implementation is to be provided by a consuming library, application or runtime environment.
Derlemeye dahil edilmez ancak çıktıya dahil edilir. Örneğin SLF4J gerçekleştirimini runtimeOnly ile değiştirebiliriz. Veya JDBC gerçekleştirimi olan mysql ya da postgresql sürücüsünü runtimeOnly ile değiştirebiliriz
4. implementation - Gradle 7 İle compile Yerine Geldi
Artık "compile" kullanılmıyor. Açıklaması şöyle. Derlemeye dahil edilir, çıktıya dahil edilir ancak consumer göremez. Maven'daki runtime scope gibi
compile(Deprecated)
Compile time dependencies. Superseded by implementation.
5. testCompileOnly
Örneğin testlerde lombok kullanmak içindir
6. testImplementation
Artık "testCompile" kullanılmıyor. Şöyle yaparız. junit-jupiter-api arayüzünü gerçekleştiren engine testRuntimeOnly olarak dahil edilir.
dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' }
Örnek
Şöyle yaparız
dependencies { ... developmentOnly 'org.springframework.boot:spring-boot-devtools' }
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
Neden compile kaldırıldı
Açıklaması şöyle.
Earlier we had a configuration called compile(Deprecated) which leak dependencies to the consumer’s compile-classpath which can cause dependency pollution (means unnecessary recompile and accidental use of transitive dependency).
Elimizde iki tane kütüphane olsun A ve B. A kütüphanesi B'yi implementation olarak kullansın. Consumer artık B'yi göremez. Ancak A kütüphanesi B'yi api olarak kullansaydı Consumer B'yi görebilirdi
Örnek
Şöyle yaparız
dependencies {implementation 'org.springframework.boot:spring-boot-starter-web:2.2.5.RELEASE'}
Örnek
Şöyle yaparız
gradlew dependencies --configuration=testRuntimeClasspath | find "log4j"
Çıktı olarak şunu alırız
------------------------------------------------------------ Root project ------------------------------------------------------------ testRuntimeClasspath - Runtime classpath of source set 'test'. +--- org.apache.logging.log4j:log4j-api -> 2.17.1 +--- org.apache.logging.log4j:log4j-core -> 2.17.1 | \--- org.apache.logging.log4j:log4j-api:2.17.1 +--- com.github.stefanbirkner:system-rules -> 1.17.0 | \--- junit:junit-dep:[4.9,) -> 4.11 | \--- junit:junit:4.11 -> 4.13.2 | \--- org.hamcrest:hamcrest-core:1.3 +--- org.junit.jupiter:junit-jupiter-api -> 5.8.1 | +--- org.junit:junit-bom:5.8.1 | | +--- org.junit.jupiter:junit-jupiter-api:5.8.1 (c) | | +--- org.junit.jupiter:junit-jupiter-engine:5.8.1 (c) | | +--- org.junit.platform:junit-platform-commons:1.8.1 (c) | | +--- org.junit.platform:junit-platform-engine:1.8.1 (c) | | \--- org.junit.vintage:junit-vintage-engine:5.8.1 (c) | +--- org.opentest4j:opentest4j:1.2.0 | \--- org.junit.platform:junit-platform-commons:1.8.1 | \--- org.junit:junit-bom:5.8.1 (*) +--- org.junit.jupiter:junit-jupiter-engine -> 5.8.1 | +--- org.junit:junit-bom:5.8.1 (*) | +--- org.junit.platform:junit-platform-engine:1.8.1 | | +--- org.junit:junit-bom:5.8.1 (*) | | +--- org.opentest4j:opentest4j:1.2.0 | | \--- org.junit.platform:junit-platform-commons:1.8.1 (*) | \--- org.junit.jupiter:junit-jupiter-api:5.8.1 (*) \--- org.junit.vintage:junit-vintage-engine -> 5.8.1 +--- org.junit:junit-bom:5.8.1 (*) +--- org.junit.platform:junit-platform-engine:1.8.1 (*) \--- junit:junit:4.13.2 (*)
Örnek
Şöyle yaparız
gradle mymodule:dependencies
Hiç yorum yok:
Yorum Gönder