gradle을 활용하여 다양한 방법으로 build를 할 수 있다.
우선, gradle build를 통해 자바 파일을 빌드하게 되면 default로 프로젝트 하위의 src/main/java 디렉터리의 파일이 target이 되어 빌드된다.
하지만, 내가 원하는 것은 그 폴더 이외의 java파일을 build하는것이다.
이 목적을 달성하기 위해서 sourceSet이라는 gradle에 기능을 찾아보고 발견한 사실을 정리해 보도록 하겠다.
- 기본으로 제공되는 sourceSet
- sourceSet 추가
- gradle build시 default로 target으로 잡히도록 srcDir 추가
- sourceSet 동적으로 추가
- gradle build시 default로 target으로 잡히는 srcDir 동적으로 추가
- sourceSet의 output파일을 어디에 생성할지 설정 추가
- sourceSet의 특정 파일 또는 디렉토리를 target에서 제거 (exclude)
기본으로 제공되는 형태
sourceSets {
main {
java {
srcDir 'src/main/java'
}
}
}
위의 형태가 기본으로 제공되는 형태이다.
여기에 원한다면 추가로 sourceSet을 만들 수 있다.
sourceSets {
main {
java {
srcDir 'src/main/java'
}
}
mysrc {
java {
srcDir 'src/my'
}
}
}
하지만, 이렇게 추가된 sourceSet은 기본으로 돌아가는 gradle build에는 target으로 잡히지 않는다.
target으로 추가하기 위해서는 이러한 방법으로 추가할 수 있다.
sourceSets {
main {
java {
srcDir 'src/main/java'
srcDir 'src/my'
}
}
}
sourceSet을 task를 통해 동적으로 추가 가능하다.
ext.modules = ["Amo", "Bmo"]
task test01() {
modules.each { module ->
sourceSets.create("${module}Test") {
//...
}
}
}
gradle build의 target으로 잡는 srcDir을 task에서 동적으로 추가하는 방법은 아래와 같다.
task test01() {
def file = new File("src/com")
sourceSets.main.java.srcDirs += [file]
sourceSets.main.java.srcDirs.each {
println(it)
}
}
Output 지정
sourceSet에 해당하는 파일이 빌드가된 output을 어떠한 디렉터리에 만들어지는지 설정이 가능하다.
sourceSets {
main {
output.dir('output/cca')
}
}
Exclude
sourceSet의 srcDir에 해당하는 특정 디렉토리를 build의 target에서 빼는 설정도 가능하다.
sourceSets {
main {
java {
exclude 'src/main/java/exet/**'
}
}
}