해당 내용은 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)에 의해 정의된 수명 주기 태스크에 일부 태스크를 연결하고 몇 가지 다른 수명 주기 태스크도 추가합니다.
assemble
jar
및 archives
구성에 연결된 artifact를 생성하는 다른 모든 태스크에 영향을 받습니다.check
test
에 영향을 받습니다.check
태스크에 추가합니다.Test
태스크를 추가해야 합니다.build
check
, assemble
에 의해 영향을 받습니다.buildNeeded
Depends on
: testRuntimeClasspath
설정에 의존하고 있는 build
및 buildNeeded
의 모든 태스크 buildDependents
Depends on
: testRumtimeClasspath
설정에 의존하고 있는 build
및 buildDependents
의 모든 태스크buildConfigName
Depends on
: ConfigName
이라고 명명된 구성에 첨부된 Artifact를 생성하는 모든 태스크uploadConfigName
Depends 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)
}
}
sourceCompatibility
targetCompatibility
sourceCompatibility
입니다.withJavadocjar()
javadocElements
Artifact -sources.jar
가 있는 변형을 생성합니다.withSourceJar()
souceElements
Artifact -sources.jar
가 있는 변형을 생성합니다.String reporting.baseDir
reports
입니다.buildDir/reporting.baseDir
입니다.String testResultsDirName
test-result
입니다.buildDir/testResultsDirName
입니다.String testReportDirName
tests
입니다.reportsDir/testReportDirName
입니다.String libsDirName
libs
입니다.(read-onl) File libsDir
buildDir/libsDirName
입니다.String distsDirName
distributions
입니다.buildDir/distsDirName
입니다.String docsDirName
docs
입니다.(read-only) File docsDir
buildDir/distsDirName
입니다.String docsDirName
docs
입니다.buildDir/docsDirName
입니다.String dependencyCacheDirName
dependency-cache
입니다.더 이상 사용되지 않습니다.(deprecated)
위에서 설명한 Java Extension으로 대체되었습니다.
자세한 내용은 Java 및 JVM 프로젝트에서 테스트를 참조하십시오.
compoents.java
jar
태스크에 의해 생성된 JAR 프로덕션을 퍼블리싱 하기 위한 SoftwareComponent입니다.Java Extension도 참고하십시오.