The Java Plugin

appti·2021년 11월 4일
0

Gradle

목록 보기
3/5

해당 내용은 Gradle 공식 홈페이지의 내용을 정리한 내용입니다.

The Java Plugin

Java 플러그인은 프로젝트에 테스트, 번들링, Java 컴파일을 추가합니다.
또한 다른 많은 JVM 언어의 Gradle 플러그인의 기초적인 기능(servces as the basis)을 제공합니다.

Usage

Java 플러그인을 사용하기 위해서는 빌드 스크립트에 다음과 같이 표기하면 됩니다.

// build.gradle

plugins {
    id 'java'
}

Tasks

Java 플러그인은 다음과 같이 해당 프로젝트에 태스크를 추가합니다.

  • compileJava

    • JDK 컴파일러를 사용하여 Java 소스 파일을 컴파일 합니다.
    • Depends on : 프로젝트 종속성을 통해 클래스 경로에 있는 프로젝트의 jar 태스크를 포함하여 컴파일 클래스 경로에 포함된 모든 태스크
  • processResources

    • 프로덕션(production, 실제 서비스를 위한 운영 환경) 리소스를 프로덕션 리소스 디렉토리에 복사합니다.
  • classes

    • complieJava, processResources에 따라 영향을 받습니다.
    • 이 태스크는 다른 태스크에 의존하는 통합(aggregate) 태스크입니다.
    • 다른 플러그인에서 해당 태스크에 컴파일 태스크를 추가할 수 있습니다.
  • compileTestJava

    • classes와 테스트 컴파일 클래스 경로를 생성하는 모든 태스크에 영향을 받습니다.
    • JDK 컴파일러를 사용하여 테스트 Java 소스 파일을 컴파일합니다.
  • testClasses

    • compileTestJava, processTestResources에 따라 영향을 받습니다.
    • 이 태스크는 다른 태스크에 의존하는 통합(aggregate) 태스크입니다.
    • 다른 플러그인에서 해당 태스크에 컴파일 태스크를 추가할 수 있습니다.
  • jar

    • classes에 따라 영향을 받습니다.
    • main Source set에 첨부된 클래스 및 자원을 기반으로 프로덕션 jar 파일을 어셈블리화합니다.
  • javadoc

    • classes에 따라 영향을 받습니다.
    • Javadoc을 사용하여 프로덕션 Java 소스에 대한 API 문서를 생성합니다.
  • test

    • testClasses와 테스트 런타임 클래스 경로를 생성하는 모든 태스크에 영향을 받습니다.
    • JUnit 또는 TestNG를 사용하여 단위 테스트를 실행합니다.
  • clean

    • 프로젝트 빌드 디렉토리(./build)를 삭제합니다.
  • cleanTaskName

    • 지정된 태스크에 의해 생성된 파일을 삭제합니다.

SourceSet Tasks

프로젝트에 추가하는 각 SourceSet에 대해 다음과 같은 태스크를 추가합니다.

  • compileSourceSetJava

    • JDK 컴파일러를 사용하여 주어진 SourceSet의 Java 소스 파일을 컴파일합니다.
    • Depends on : SourcseSet의 컴파일 클래스 경로에 영향을 끼치는 모든 태스크
  • processSourceSetResources

    • 지정된 SourceSet의 리소스를 리소스 디렉토리에 복사합니다.
  • sourceSetClasses

    • compileSourceSetJava, processSourceSetResources에 영향을 받습니다.
    • 패키징 및 실행을 위해 지정된 SourceSet의 클래스 및 리소스를 준비합니다.
    • 일부 플러그인은 SourceSet에 대한 컴파일 작업을 추가할 수 있습니다.

Lifecycle Tasks

Java 플러그인은 Java 플러그인이 자동으로 적용하는 기본 플러그인(Base Plugin)에 의해 정의된 수명 주기 태스크에 일부 태스크를 연결하고 몇 가지 다른 수명 주기 태스크도 추가합니다.

  • assemble
    • jararchives 구성에 연결된 artifact를 생성하는 다른 모든 태스크에 영향을 받습니다.
    • 프로젝트의 모든 archives를 취합하는 통합(aggregate) 태스크입니다.
    • 해당 태스크는 기본 플러그인에 의해 추가됩니다.
  • check
    • test에 영향을 받습니다.
    • 테스트 실행과 같은 확인 작업을 수행하는 통합(aggregate) 태스크입니다.
    • 일부 플러그인 자체 확인 태스크를 check 태스크에 추가합니다.
    • 전체 빌드를 실행하기 위해서는 해당 프로젝트의 수명 주기 태스크에 커스텀 Test 태스크를 추가해야 합니다.
    • 해당 태스크는 기본 플러그인에 의해 추가됩니다.
  • build
    • check, assemble에 의해 영향을 받습니다.
    • 프로젝트의 전체 빌드를 수행하는 태스크를 통합(aggregate)합니다.
    • 해당 태스크는 기본 플러그인에 의해 추가됩니다.
  • buildNeeded
    • 프로젝트 및 종속된 모든 프로젝트의 전체 빌드를 수행합니다.
    • Depends on : testRuntimeClasspath 설정에 의존하고 있는 buildbuildNeeded의 모든 태스크
  • buildDependents
    • 프로젝트 및 종속된 모든 프로젝트의 전체 빌드 수행합니다.
    • Depends on : testRumtimeClasspath설정에 의존하고 있는 buildbuildDependents의 모든 태스크
  • buildConfigName
    • 지정된 구성에 대한 Artifact를 Assemble합니다.
    • 이 규칙은 기본 플러그인에 의해 추가됩니다.
    • Depends on : ConfigName이라고 명명된 구성에 첨부된 Artifact를 생성하는 모든 태스크
  • uploadConfigName
    • 지정된 구성에서 Artifact를 Assemble하고 업로드합니다.
    • 이 규칙은 기본 플러그인에 의해 추가됩니다.
    • Depends on : ConfigName이라고 명명된 구성에 첨부된 Artifact를 생성하는 모든 태스크

이러한 태스크 간의 관계를 그림으로 표현하면 다음과 같습니다.

Project layout

Java 플러그인은 다음과 같은 프로젝트 레이아웃을 가정합니다.
이러한 디렉토리는 없을 수도 있고, 빈 디렉토리일 수 있습니다.
Java 플러그인은 발견한 모든 것을 컴파일하고 누락된 모든 것들을 처리합니다.

  • src/main/java

    • 프로덕션 자바 소스
  • src/main/resources

    • XML 및 Properties와 같은 프로덕션 리소스
  • src/test/java

    • 테스트 용 자바 소스
  • src/test/resources

    • 테스트 용 리소스
  • src/sourceSet/java

    • SourceSet이라는 이름의 Java 소스
  • src/sourceSet/resources

    • SourceSet이라는 이름에 대한 리소스

Changing the project layout

적절한 SourceSet을 구성하여 프로젝트 레이아웃을 변경할 수 있습니다.
다음은 사용자 정의 Java 소스 레이아웃의 예시입니다.

// build.gradle

sourceSets {
    main {
        java {
            srcDirs = ['src/java']
        }
        resources {
            srcDirs = ['src/resources']
        }
    }
}

Source sets

Java 플러그인은 다음과 같은 SourceSet을 추가합니다.

  • main

    • JAR로 컴파일 및 Assemble되는 프로젝트의 프로덕션 소스 코드를 포함합니다.
  • test

    • JUnit 또는 TestNG를 사용하여 컴파일 및 실행되는 테스트 소스 코드를 포함합니다.
    • 일반적으로 단위 테스트이지만 동일한 컴파일 및 런타임 클래스 경로를 공유하는 한 이 SourceSet에 모든 테스트를 포함할 수 있습니다.

Source set properties

SourceSet API에서 자세히 확인할 수 있습니다.

Defining new source sets

Java 및 JVM 프로젝트에서 통합 테스트 예제를 참고하십시오.

Some other simple source set examples

다른 간단한 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에서 테스트를 실행합니다.

Dependency management

Java 플러그인 다음과 같이 프로젝트에 여러 종속성 구성을 추가합니다.
compileJavatest같은 태스크를 실행한 다음 해당 파을을 얻을 컴파일 또는 런타임 클래스 경로에 배치합니다.

Dependency configurations

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

    • 테스트 실행을 위한 런타임 클래스 경로
    • test 태스크에서 사용
  • archives

    • 해당 프로젝트에서 생성된 아티팩트
    • 빌드 실행 시 기본 태스크를 결정하기 위해 Gradle에서 사용
  • default extends runtimeElements

    • 해당 프로젝트에 대한 프로젝트 종속성이 사용하는 기본 구성
    • 런타임 시 해당 프로젝트에 필요한 아티팩트 및 종속성을 포함

이를 그림으로 표현하면 다음과 같습니다.

SourceSet dependency configurations

프로젝트에 추가하는 각 SourceSet에 대해 Java 플러그인은 다음 종속성 구성을 추가합니다.

  • sourceSetImplementation

    • 주어진 SourceSet에 대한 컴파일 타임 종속성에 사용됩니다.
    • sourceSetCompileClasspath, sourceSetRuntimeClasspath에서 사용합니다.
  • sourceSetCompileOnly

    • 런타임에 사용되지 않는 주어진 SourceSet에 대한 컴파일 타임 전용 종속성입니다.
  • sourceSetCompileClasspath extends sourceSetCompileOnly, sourceSetImplementation

    • 소스를 컴파일 할 때 사용되는 컴파일 클래스 경로입니다.
    • compileSourceSetJava에서 사용합니다.
  • sourceSetAnnotationProcessor

    • 이 SourceSet을 컴파일하는 동안 사용된 Annotation Processor 입니다.
  • sourceSetRuntimeOnly

    • 주어진 SourceSet에 대한 런타임 전용 종속성 입니다.
  • sourceSetRuntimeClasspath extends sourceSetRuntimeOnly, sourceSetImplementation

    • 런타임 클래스 경로에 구현 요소와 런타임 전용 요소가 포함됩니다.

Contributed extension

Java 플러그인은 프로젝트에 Java Extension을 추가합니다.
이를 통해 전용 DSL 블록 내에서 여러 Java 관련 속성을 구성할 수 있습니다.

다음은 Java Extension을 사용한 예제입니다.

// build.gradle

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(11)
    }
}
  • JavaVersion sourceCompatibility
    • Java 소스를 컴파일할 때 사용할 Java 버전 호환성입니다.
    • 기본값은 현재 사용 중인 JVM의 버전입니다.
  • JavaVersion targetCompatibility
    • 클래스를 생성할 Java 버전입니다.
    • 기본값은 sourceCompatibility 입니다.
  • withJavadocjar()
    • Javadoc을 자동으로 패키징 하고 결과물의 일부가 될 javadocElements Artifact -sources.jar가 있는 변형을 생성합니다.
  • withSourceJar()
    • 소스 코드를 자동으로 패키징 하고 결과물의 일부가 될 souceElements Artifact -sources.jar가 있는 변형을 생성합니다.

Directory properties

  • String reporting.baseDir
    • 빌드 디렉토리를 기준으로 보고서를 생성할 디렉토리의 이름입니다.
    • 기본값은 reports 입니다.
  • `(read-only) File reportsDir
    • 보고서를 생성할 디렉토리입니다.
    • 기본값은 buildDir/reporting.baseDir 입니다.
  • String testResultsDirName
    • 빌드 디렉토리를 기준으로 테스트 결과 XML 파일을 생성할 디렉토리의 이름입니다.
    • 기본값은 test-result 입니다.
  • `(read-only) File testResultsDir
    • 테스트 결과 XML 파일을 생성할 디렉토리입니다.
    • 기본값은 buildDir/testResultsDirName 입니다.
  • String testReportDirName
    • 보고서 디렉토리를 기준으로 테스트 보고서를 생성할 디렉토리의 이름입니다.
    • 기본값은 tests 입니다.
  • `(read-only) File testReportDir
    • 테스트 보고서를 생성할 디렉토리입니다.
    • 기본값은 reportsDir/testReportDirName 입니다.
  • String libsDirName
    • 빌드 디렉토리를 기준으로 라이브러리를 생성할 디렉토리의 이름입니다.
    • 기본값은 libs 입니다.
  • (read-onl) File libsDir
    • 라이브러리를 생성할 디렉토리입니다.
    • 기본값은 buildDir/libsDirName 입니다.
  • String distsDirName
    • 빌드 디렉토리를 기준으로 배포를 생성할 디렉토리의 이름입니다.
    • 기본값은 distributions 입니다.
  • `(read-only) File distsDir
    • 배포를 생성할 디렉토리입니다.
    • 기본값은 buildDir/distsDirName 입니다.
  • String docsDirName
    • 빌드 디렉토리를 기준으로 문서를 생성할 디렉토리의 이름입니다.
    • 기본값은 docs 입니다.
  • (read-only) File docsDir
    • 문서를 생성할 디렉토리입니다.
    • 기본값은 buildDir/distsDirName 입니다.
  • String docsDirName
    • 빌드 디렉토리를 기준으로 문서를 생성할 디렉토리의 이름입니다.
    • 기본값은 docs 입니다.
  • `(read-only) File docsDir
    • 문서를 생성할 디렉토리입니다.
    • 기본값은 buildDir/docsDirName 입니다.
  • String dependencyCacheDirName
    • 빌드 디렉토리와 관련된 소스 종속성 정보를 캐시하는 데 사용할 디렉토리의 이름입니다.
    • 기본값은 dependency-cache 입니다.

Convention properties (deprecated)

더 이상 사용되지 않습니다.(deprecated)
위에서 설명한 Java Extension으로 대체되었습니다.

Testing

자세한 내용은 Java 및 JVM 프로젝트에서 테스트를 참조하십시오.

Publishing

  • compoents.java
    • jar 태스크에 의해 생성된 JAR 프로덕션을 퍼블리싱 하기 위한 SoftwareComponent입니다.
    • 이 구성 요소에는 JAR에 대한 런타임 종속성 정보가 포함됩니다.

Java Extension도 참고하십시오.

profile
안녕하세요

0개의 댓글