해당 내용은 Gradle 공식 홈페이지의 내용을 정리한 내용입니다.
Java 플러그인은 프로젝트에 테스트, 번들링, Java 컴파일을 추가합니다.
또한 다른 많은 JVM 언어의 Gradle 플러그인의 기초적인 기능(servces as the basis)을 제공합니다.
Java 플러그인을 사용하기 위해서는 빌드 스크립트에 다음과 같이 표기하면 됩니다.
// build.gradle
plugins {
id 'java'
}
Java 플러그인은 다음과 같이 해당 프로젝트에 태스크를 추가합니다.
compileJava
Depends on : 프로젝트 종속성을 통해 클래스 경로에 있는 프로젝트의 jar 태스크를 포함하여 컴파일 클래스 경로에 포함된 모든 태스크processResources
classes
complieJava, processResources에 따라 영향을 받습니다.compileTestJava
classes와 테스트 컴파일 클래스 경로를 생성하는 모든 태스크에 영향을 받습니다.testClasses
compileTestJava, processTestResources에 따라 영향을 받습니다.jar
classes에 따라 영향을 받습니다.main Source set에 첨부된 클래스 및 자원을 기반으로 프로덕션 jar 파일을 어셈블리화합니다.javadoc
classes에 따라 영향을 받습니다.test
testClasses와 테스트 런타임 클래스 경로를 생성하는 모든 태스크에 영향을 받습니다.clean
cleanTaskName
프로젝트에 추가하는 각 SourceSet에 대해 다음과 같은 태스크를 추가합니다.
compileSourceSetJava
Depends on : SourcseSet의 컴파일 클래스 경로에 영향을 끼치는 모든 태스크processSourceSetResources
sourceSetClasses
compileSourceSetJava, processSourceSetResources에 영향을 받습니다.Java 플러그인은 Java 플러그인이 자동으로 적용하는 기본 플러그인(Base Plugin)에 의해 정의된 수명 주기 태스크에 일부 태스크를 연결하고 몇 가지 다른 수명 주기 태스크도 추가합니다.
assemblejar 및 archives 구성에 연결된 artifact를 생성하는 다른 모든 태스크에 영향을 받습니다.checktest에 영향을 받습니다.check 태스크에 추가합니다.Test 태스크를 추가해야 합니다.buildcheck, assemble에 의해 영향을 받습니다.buildNeededDepends on : testRuntimeClasspath 설정에 의존하고 있는 build 및 buildNeeded의 모든 태스크 buildDependentsDepends on : testRumtimeClasspath설정에 의존하고 있는 build 및 buildDependents의 모든 태스크buildConfigNameDepends on : ConfigName이라고 명명된 구성에 첨부된 Artifact를 생성하는 모든 태스크uploadConfigNameDepends on : ConfigName이라고 명명된 구성에 첨부된 Artifact를 생성하는 모든 태스크이러한 태스크 간의 관계를 그림으로 표현하면 다음과 같습니다.

Java 플러그인은 다음과 같은 프로젝트 레이아웃을 가정합니다.
이러한 디렉토리는 없을 수도 있고, 빈 디렉토리일 수 있습니다.
Java 플러그인은 발견한 모든 것을 컴파일하고 누락된 모든 것들을 처리합니다.
src/main/java
src/main/resources
src/test/java
src/test/resources
src/sourceSet/java
src/sourceSet/resources
적절한 SourceSet을 구성하여 프로젝트 레이아웃을 변경할 수 있습니다.
다음은 사용자 정의 Java 소스 레이아웃의 예시입니다.
// build.gradle
sourceSets {
main {
java {
srcDirs = ['src/java']
}
resources {
srcDirs = ['src/resources']
}
}
}
Java 플러그인은 다음과 같은 SourceSet을 추가합니다.
main
test
SourceSet API에서 자세히 확인할 수 있습니다.
Java 및 JVM 프로젝트에서 통합 테스트 예제를 참고하십시오.
다른 간단한 SourceSet의 클래스를 포함하는 JAR 예제는 다음과 같습니다.
// build.gradle
tasks.register('intTestJar', Jar) {
from sourceSets.intTest.output
}
위 예제는 SourceSet에 대한 JAR Assemble 입니다.
// build.gradle
tasks.register('intTestJavadoc', Javadoc) {
source sourceSets.intTest.allJava
}
위 예제는 SourceSet에 대한 Javadoc을 생성합니다.
// build.gradle
tasks.register('intTest', Test) {
testClassesDirs = sourceSets.intTest.output.classesDirs
classpath = sourceSets.intTest.runtimeClasspath
}
위 예제는 SoureSet에서 테스트를 실행합니다.
Java 플러그인 다음과 같이 프로젝트에 여러 종속성 구성을 추가합니다.
compileJava나 test같은 태스크를 실행한 다음 해당 파을을 얻을 컴파일 또는 런타임 클래스 경로에 배치합니다.
api 구성에 대한 정보를 찾고자 한다면 Java 라이브러리 플러그인 및 Java 프로젝트에 대한 종속성 관리
종속성 구성에 대한 간단한 정보는 다음과 같습니다.
implementation
compileOnly
compileClasspath extends compileOnly, implementation
compileJava 태스크에서 사용runtimeOnly
runtimeClasspath extends runtimeOnly, implementation
testImplementation extends implementation
testCompileOnly
testCompileClasspath extends testCompileOnly, testImplementation
compileTestJava 태스크에서 사용testRuntimeOnly extends runtimeOnly
testRuntimeClasspath extends testRuntimeOnly, testImplementation
archives
default extends runtimeElements
이를 그림으로 표현하면 다음과 같습니다.


프로젝트에 추가하는 각 SourceSet에 대해 Java 플러그인은 다음 종속성 구성을 추가합니다.
sourceSetImplementation
sourceSetCompileClasspath, sourceSetRuntimeClasspath에서 사용합니다.sourceSetCompileOnly
sourceSetCompileClasspath extends sourceSetCompileOnly, sourceSetImplementation
compileSourceSetJava에서 사용합니다.sourceSetAnnotationProcessor
sourceSetRuntimeOnly
sourceSetRuntimeClasspath extends sourceSetRuntimeOnly, sourceSetImplementation
Java 플러그인은 프로젝트에 Java Extension을 추가합니다.
이를 통해 전용 DSL 블록 내에서 여러 Java 관련 속성을 구성할 수 있습니다.
다음은 Java Extension을 사용한 예제입니다.
// build.gradle
java {
toolchain {
languageVersion = JavaLanguageVersion.of(11)
}
}
sourceCompatibilitytargetCompatibilitysourceCompatibility 입니다.withJavadocjar() javadocElements Artifact -sources.jar가 있는 변형을 생성합니다.withSourceJar()souceElements Artifact -sources.jar가 있는 변형을 생성합니다.String reporting.baseDirreports 입니다.buildDir/reporting.baseDir 입니다.String testResultsDirNametest-result 입니다.buildDir/testResultsDirName 입니다.String testReportDirNametests 입니다.reportsDir/testReportDirName 입니다.String libsDirNamelibs 입니다.(read-onl) File libsDirbuildDir/libsDirName 입니다.String distsDirNamedistributions 입니다.buildDir/distsDirName 입니다.String docsDirNamedocs 입니다.(read-only) File docsDirbuildDir/distsDirName 입니다.String docsDirNamedocs 입니다.buildDir/docsDirName 입니다.String dependencyCacheDirNamedependency-cache 입니다.더 이상 사용되지 않습니다.(deprecated)
위에서 설명한 Java Extension으로 대체되었습니다.
자세한 내용은 Java 및 JVM 프로젝트에서 테스트를 참조하십시오.
compoents.javajar 태스크에 의해 생성된 JAR 프로덕션을 퍼블리싱 하기 위한 SoftwareComponent입니다.Java Extension도 참고하십시오.