새소식

반응형
Development

[Gradle] Gradle sourceSet

  • -
반응형

출처 : https://ko.wikipedia.org/wiki/Gradle

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/**'
    }
  }
}
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.