[ Gradle ] Writing Build Scripts
Property
group
: artifact(애플리케이션)를 배포하는 데 사용됨(maven repository에서 implementation url 찾을때 생각하면 됨)- eg)
org.codehaus.groovy:groovy-core
groupId:org.codehaus.groovy
, artifact : groovy-core (project의 이름) - gradle subprojcet의 이름이 api 면 artifact이름이 api ⇒ api-0.0.1.jar (api-<version>.jar)
version
: 이 프로젝트의 버전. 이상적으로 프로덕션 배포마다 버전이 올라감
- sourceCompatibility: java 컴파일을 위해 추가한 java 플러그인에서 sourceCompatibility에 명시된 자바 버전을 이용해 소스를 컴파일함
Lombok
- 롬복은 어노테이션을 추가하면 컴파일 시 그에 상응하는 코드를 만들어 주는 라이브러리임
- 이때 롬복이 코드를 작성하려면 annotationProcessor 라는 것이 필요함
- 그래서, configurations 부분에서 annotationProcessor를 컴파일 당시 사용하라고 그래들에게 알려줌
- 또, 이 annotationProcessor로 org.projectlombok:lombok을 사용하도록 디펜던시에 명시하는 것
repositories
: 그래들이 라이브러리를 다운로드 하는 곳
dependency
: 이 프로젝트에서 사용할 라이브러리를 명시하면 그래들이 리포지토리에서 라이브러리를 다운 & 설치함
test
: 그래들을 사용하면 빌드 뿐 아니라 유닛 테스트도 실행시킬 수 있음. 해당 항목에서는 테스트에 관련된 설정을 할 수 있음
annotation Processing 설정
Gradle dependency에 어노테이션 프로세서 라이브러리를 추가했지만 이 라이브러리는 그래들이 인식하는 라이브러리이지 편집기에서는 따로 설정을 해주어야 함. 따로 설정하지 않으면 문법에러로 간주할 수 있음(eclipse의 예시)
Dependency Configuration
- compileOnly : 해당 의존성을 컴파일시에만 포함
- runtimeOnly : 해당 의존성을 런타임시에만 포함
- 컴파일 시에 해당 의존성을 포함하지 않음으로써 컴파일 시간 줄일 수 있음
컴파일시, 런타임시 상관없이 모든 과정에 의존성을 추가하는 지시어
- compile : 해당 의존성을 직/간접적으로 의존하고 있는 모든 의존성을 재빌드
- implementation : 해당 의존성을 직접 의존하고 있는 의존성만 재빌드
- testCompileOnly, testRuntimeOnly, testCompile, testImplementation 은 테스트 시에만 적용된다는 점만 다르고 기본동작방식은 같음
- annotationProcessor : 컴파일러에게 어노테이션 확인할 때 해당 라이브러리도 확인해달라고 요청하는 것임(기본적으로 포함되어 있는 어노테이션이 아니라면 이를 통해 명시적으로 추가해주어야함)
transitive dependency 제외하는 방법
[ Gradle] Excluding transitive dependencies
주의점
: exclude 했는데도 계속 dependency가 남아 있으면, 다른 dependency의 transitive dependency로 해당 dependency가 다시 포함된 것이 아닌지 확인해보기! (bygradle dependencies
task)
Register and configure Tasks
- register : add a task to the project
tasks.register<Zip>("zip-reports") { from 'Reports/' include '*' archiveName 'Reports.zip' destinationDir(file('/dir')) }
- configure : locate a task to configure it
tasks.named<Test>("test") { useJUnitPlatform() }