개요.

querydsl 을 gradle 에 추가하다보면, sourceSets 이란 블록을 만나게 되는데 매번 복붙하면서 하려고 하니깐 안되겠다 싶어서 reference 보고 정리하기 위함. 

 

막상 정리하려고 보니, 어디부터 해야할지 몰라 일단 번역이라도 해보면서 이해를 하고자 한다. 
나름의 번역과 의역을 하였고 틀린 것 다시 수정하려고 한다.

 

 

SourceSets 를 통하여 source file 을 선언하기 (링크)

자바의 그래들은 source 에 기반한 프로젝트를 구축하기 위해서 처음으로 source sets 란 개념을 도입했다. 이 아이디어는 source files & resources 를 유형에 따라서 논리적으로 그룹화시킬 수 있다는 것이다.

  • 애플리케이션 코드
  • 단위테스트 및 통합테스트

각각의 논리적 그룹은 각각의 고유한 디펜던시, 클래스 패스 등이 따로따로 존재하고 있는 상태이다. 그리고 이런 source set 은 그러한 논리적 그룹들이 동일한 디렉토리에 위치할 필요가 없다는 것이다.

 

★ source sets 는 컴파일의 여러측면을 연결하는 강력한 개념이다.

  • source files 및 해당 파일들의 위치
  • gradle 구성을 통해 필요한 디펜던시를 포함시킨 컴파일 클래스 패스
  • 컴파일된 클래스 파일이 놓여있는 위치

source sets 을 통해서 위치불문하고, 파일 또는 클래스 패스를 다른 파일들과 함께 컴파일을 시킬 수 있다.

 

 

연두색으로 처리된 상자는 source set 그 자체를 나타낸다. 

 

main source sets

자바를 포함한 대부분의 언어 플러그인은 production 코드에서 사용되는 main 이라는 source sets 를 자동으로 생성한다. main source sets 는 configurations 블록이나 tasks 블록에 포함되지 않는 점에서 특별하다. 따라서 main 이라고 포함된 compileJava, CompileOnly 가 없는 것도 이런 이유 때문이다.

 

 

파일과 디렉토리 위치를 커스터마이징하기 (링크)

네가 가진 레거시 프로젝트가 production 코드로 src 디렉토리를 사용하고 있고, test 코드로 test 디렉토리를 사용하고 있다고 생각해보자. 기존 디렉토리 구조는 작동하지 않을 것이고, gradle 에서 source files 의 위치를 알려주어야 한다. 결과적으로 source sets configuration 을 이용하여야 한다.

sourceSets {
    main {
         java {
            srcDirs = ['src']		// 	production code 는 src 디렉토리를 사용한다.
         }
    }

    test {
        java {
            srcDirs = ['test']		//  test code 는 test 디렉토리를 사용한다.
        }
    }
}

 

이제는, gradle 직접 검색해서 위와 같이 src, test 를 사용한다. 이 때, 해당 규칙을 재정의하지 않고 단순히 타사의 소스코드가 포함된 소스 디렉토리를 추가하려고 한다면 어떻게 해야할까 ? (srcDirs 가 늘어나야 된다는 소리)

sourceSets {
    main {
        java {
            srcDir 'thirdParty/src/main/java'
        }
    }
}
  • srcDir() 는 기존의 디렉토리에 새로운 디렉토리 경로값을 추가할 수 있다.
  • srcDirs() 는 기존의 디렉토리 값을 대체한다.

 

// 실행을 위해 함께 컴파일되는 추가적인 리소스 파일의 모음
sourceSets {
//    main.java.srcDir (querydslDir)
    main.java.srcDirs += [querydslDir]
}

동일한 의미를 지니고 있다.

Posted by doubler
,