2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

Gradle에서 `sourceSets`를 사용하는 방법은 무엇인가요?

_____
Q1: Gradle에서 `sourceSets`란 무엇인가요?
A1: `sourceSets`는 Gradle 빌드에서 소스 코드와 리소스 파일의 위치를 정의하는 구성 요소입니다. 기본적으로 `main`과 `test` source set이 있으며, 각각의 소스 경로, 리소스 경로, 컴파일 클래스 패스 등을 설정할 수 있습니다.

Q2: `sourceSets`를 기본적인 형태로 어떻게 선언하나요?
A2: `build.gradle` 파일 내에서 다음과 같이 선언합니다.
```groovy
sourceSets {
main {
java {
srcDirs = ['src/main/java']
}
resources {
srcDirs = ['src/main/resources']
}
}
test {
java {
srcDirs = ['src/test/java']
}
resources {
srcDirs = ['src/test/resources']
}
}
}
```
이는 기본값과 동일하지만, 사용자 지정 경로나 추가 설정을 할 때 유용합니다.

Q3: 새로운 sourceSet을 추가하려면 어떻게 하나요?
A3: 다음과 같이 `sourceSets` 블록 내에 새로운 이름으로 추가합니다.
```groovy
sourceSets {
integrationTest {
java {
srcDirs = ['src/integrationTest/java']
}
resources {
srcDirs = ['src/integrationTest/resources']
}
compileClasspath += sourceSets.main.output + configurations.testRuntimeClasspath
runtimeClasspath += output + compileClasspath
}
}
```
추가한 sourceSet에 맞는 컴파일 및 테스트 작업도 별도로 설정해야 합니다.

Q4: sourceSet의 클래스를 참조하는 방법은?
A4: Gradle 태스크에서 `sourceSets`를 다음과 같이 사용할 수 있습니다.
```groovy
tasks.register('printMainJavaSrc') {
doLast {
println sourceSets.main.java.srcDirs
}
}
```
이는 `main` 소스 코드 디렉터리 목록을 출력합니다.

Q5: 자바 소스 외에 다른 언어 소스 경로를 설정할 수 있나요?
A5: 네, 예를 들어 Kotlin 코드를 포함할 때는 해당 언어 소스 세트를 별도로 지정하거나, 단일 sourceSet 내에서 설정할 수 있습니다. 보통 `java` 대신 `kotlin`을 사용합니다.
```groovy
sourceSets {
main {
kotlin {
srcDirs = ['src/main/kotlin']
}
}
}
```
적용하려면 Kotlin 플러그인을 함께 사용해야 합니다.

Q6: `sourceSets`에 포함된 리소스 파일의 위치를 변경하려면?
A6: `resources.srcDirs` 속성을 수정하면 됩니다.
```groovy
sourceSets {
main {
resources {
srcDirs = ['custom/resources/path']
}
}
}
```

Q7: 특정 sourceSet에 의존성을 추가하려면 어떻게 해야 하나요?
A7: 보통 기본 sourceSet인 `main`과 `test`에 대해 `dependencies`를 추가하며, 다른 sourceSet의 경우 별도의 구성(configuration)을 만들어 연결해야 합니다. 예를 들어 `integrationTest` sourceSet에 의존성을 추가하려면 다음과 같이 합니다.
```groovy
configurations {
integrationTestImplementation.extendsFrom implementation
integrationTestRuntimeOnly.extendsFrom runtimeOnly
}

dependencies {
integrationTestImplementation 'org.some:library:1.0'
}
```

Q8: 기존 sourceSet을 수정하는 팁이 있나요?
A8: 주의할 점은, 기본 sourceSet 경로를 수정하면 기존 플러그인(예: 자바 또는 안드로이드 플러그인)이 기대하는 기본 구조와 달라질 수 있으므로 빌드가 실패할 수 있습니다. 경로를 변경할 경우 다른 관련 설정도 함께 조정해야 합니다.

Q9: Gradle 버전에 따른 `sourceSets` 사용 시 유의사항은?
A9: Gradle 5.x 이상부터는 Kotlin DSL로도 `sourceSets`를 선언할 수 있으며, 문법이 약간 다릅니다. 예:
```kotlin
sourceSets {
val main by getting {
java.srcDirs("src/main/kotlin")
}
}
```
따라서 사용 중인 Gradle 버전에 맞는 문서를 참고해야 합니다.

---

요약하면, Gradle의 `sourceSets`는 빌드에 포함되는 소스와 리소스 위치를 세밀하게 제어하는 구조이며, 사용자 프로젝트에 맞게 경로, 의존성, 컴파일 및 런타임 클래스패스를 조정할 수 있습니다.
Gradle에서 `sourceSets`는 프로젝트의 소스 코드, 리소스, 테스트 코드 등을 구성하는 데 사용되는 중요한 개념입니다.

`sourceSets`를 통해 개발자는 프로젝트의 구조를 정의하고, 각 소스 세트에 대해 컴파일, 테스트 및 실행 시 사용할 파일의 경로를 지정할 수 있습니다.

이 기능은 특히 대규모 프로젝트나 여러 모듈로 구성된 프로젝트에서 유용합니다.

기본 개념 Gradle의 `sourceSets`는 기본적으로 Java, Groovy, Kotlin 등 다양한 언어의 소스 파일을 관리하는 데 사용됩니다.

각 `sourceSet`은 다음과 같은 구성 요소를 포함할 수 있습니다: - Java 소스 파일 : `.java` 파일 - 리소스 파일 : `.properties`, `.xml`, 이미지 파일 등 - 테스트 소스 파일 : 테스트를 위한 소스 파일 - 리소스 테스트 파일 : 테스트에 필요한 리소스 파일 기본 사용법 Gradle 프로젝트에서 `sourceSets`를 정의하는 방법은 다음과 같습니다.

`build.gradle` 파일에 다음과 같은 내용을 추가합니다: ```groovy apply plugin: 'java' sourceSets { main { java { srcDirs = ['src/main/java'] } resources { srcDirs = ['src/main/resources'] } } test { java { srcDirs = ['src/test/java'] } resources { srcDirs = ['src/test/resources'] } } } ``` 위의 예제에서 `main`과 `test`라는 두 개의 `sourceSet`을 정의했습니다.

각 `sourceSet`은 Java 소스 파일과 리소스 파일의 경로를 지정합니다.

커스터마이징 `sourceSets`는 기본 경로 외에도 추가적인 소스 디렉토리를 지정하거나, 특정 파일을 제외하는 등의 커스터마이징이 가능합니다.

예를 들어, 다음과 같이 추가적인 소스 디렉토리를 추가할 수 있습니다: ```groovy sourceSets { main { java { srcDirs += 'src/extra/java' } } } ``` 또한, 특정 파일을 제외하고 싶다면 `exclude` 메서드를 사용할 수 있습니다: ```groovy sourceSets { main { java { srcDirs = ['src/main/java'] exclude ' /SomeClass.java' } } } ``` 다중 소스 세트 Gradle은 여러 개의 소스 세트를 정의할 수 있습니다.

예를 들어, `integrationTest`라는 새로운 소스 세트를 추가할 수 있습니다: ```groovy sourceSets { integrationTest { java { srcDirs = ['src/integrationTest/java'] } resources { srcDirs = ['src/integrationTest/resources'] } } } configurations { integrationTestImplementation.extendsFrom testImplementation integrationTestRuntimeOnly.extendsFrom testRuntimeOnly } task integrationTest(type: Test) { testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } ``` 위의 예제에서는 `integrationTest`라는 새로운 소스 세트를 정의하고, 이를 위한 테스트 작업을 생성했습니다.

결론 Gradle의 `sourceSets`는 프로젝트의 소스 코드 구조를 명확하게 정의하고 관리하는 데 매우 유용한 도구입니다.

이를 통해 개발자는 소스 파일을 체계적으로 구성하고, 필요에 따라 커스터마이징할 수 있습니다.

대규모 프로젝트나 복잡한 모듈 구조를 가진 프로젝트에서 `sourceSets`를 적절히 활용하면 코드 관리와 빌드 프로세스를 효율적으로 개선할 수 있습니다.

작성자: 정예린 [비회원] | 작성일자: 1년 전 2025-01-01 07:51:46
조회수: 133 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.