gradle 빌드를 하는 과정

jv·2023년 6월 30일
0

'gradle init' 단계가 완료되면 gradle 빌드를 할 수 있다.
방법은 콘솔에 커맨드 입력인데 2가지 커맨드가 있다.
협업이 있을 수 있는 개발 환경에선 'gradlew wrapper'가 바람직하다.
협업이 전혀 없고 개발 환경이 바뀔 일이 없을 예정이면 'gradle build'로 할 수도 있다.

목차

  • 빌드 커맨드(1) - 'gradle build'
  • 빌드 커맨드(2) - 'gradlew wrapper'
  • gradle init와 gradle 빌드 사이에서 할 수 있는 것들
  • gradle 빌드 하기 전 주의사항

gradle build 커맨드

Local installation이다.
만드는 프로젝트가 1. 협업을 할 일이 없고 2. 한 컴퓨터에서 계속 할 것 같다면 이 커맨드로 빌드를 해도 무방하다. 특별히 무슨 장점이 있는지 아직 모르겠다.

gradlew wrapper 커맨드

'gradlew wrapper'로 빌드된 프로젝트는, 그것을 다른 컴퓨터에서 공유했을 때 gradle 설치 과정을 안 해도 바로 사용이 가능하다. 프로젝트에 맞는 gradle버전을 설치할 필요도 없다.
그래서 협업 또는 작업 컴퓨터를 바꿀 가능성이 있다면 이 커맨드로 빌드하는 것이 바람직하다.

gradle init와 gradle 빌드 사이에서 할 수 있는 것

  • 프로젝트 폴더 구조를 원하는 대로 재구성할 수 있다. 모듈을 추가하거나 뺄 수도 있다. (인텔리제이에서 모듈 만들기 링크)

    하위 모듈을 만들 경우 그 하위 경로에 소스 루트와 테스트 소스 루트를 추가한다. 인텔리제이에선 소스루트는 파란색 폴더, 테스트 소스 루트는 초록색 폴더로 표시된다. 각각 패키지를 오른쪽 클릭해서 지정할 수 있다. 필수적이다.

  • build.gradle 파일은 gradle 프로젝트의 설정 파일이고 필수요소이다.
    여기에 프로젝트에 필요한 플러그인 등 각종 의존성 설정을 작성한다.
    build.gradle 파일이 있어야 할 위치에 있지 않으면 빌드가 되지 않으므로, 폴더 구조를 바꿨다면 그 구조에서 build.gradle의 위치가 조건에 맞아야 한다.

  • settings.gradle 파일에는 멀티 프로젝트에서 관련 있는 속성들을 설정할 수 있다.

    include('app')은 이름이 app인 하위 프로젝트를 포함한다는 뜻이다. 새로운 모듈을 만들면 이 코드가 생긴다.
    이 코드를 삭제하면 모듈이었던 app/이 일반 폴더가 되는 것을 볼 수 있다.

  • gradle.properties 파일에 작성할 수 있는 추가 설정도 있는데 필수는 아니다.

주의사항

build.gradle이 조건에 맞는 위치에 있지 않으면 빌드가 제대로 되지 않는다.
build/ 폴더가 나타나지 않으면 빌드가 정상적으로 되지 않은 것이다.

build.gradle은 빌드 전에 있어야 하는 위치가 정해져 있다.
1. 독립된 프로젝트 단위인 모듈에 설정을 제공할 수 있도록 모듈의 루트에 있거나
2. 모듈에 상속될 수 있도록 프로젝트 루트에 있어야 한다.
그런 필요한 위치에 build.gradle이 제 자리에 없으면 빌드가 정상적으로 되지 않는다.
그래서 빌드 전에 필요한 경로 위치에 build.gradle이 있는게 맞는지 확인이 필요할 수 있다.

'gradle init' 완료 후의 프로젝트 폴더 구조를 보면, 프로젝트 루트 폴더가 모듈인데 그 아래 app/이라는 모듈이 하나 더 있고 그 밑에 build.gradle과 src/main/과 src/test가 있다.
이것은 중간에 모듈이 하나 더 있지만 단일 프로젝트 구조인 상태이다.

app/ 모듈 바로 아래에 build.gradle이 있는 상태이고 이 상태에서 빌드를 하면 정상적으로 된다. 그런데 잘 모르고 프로젝트 폴더 구조를 바꾼 후에 빌드가 제대로 되지 않는다면 build.gradle의 위치 때문일 수도 있다.

프로젝트 구조를 변경해서 만약 app/ 모듈 바깥에 src/main과 src/test를 갖는 모듈을 추가로 만든다면 그 모듈마다 맞춤형 설정을 할 build.gradle이 있어야 한다.
없다면, 프로젝트 루트에 build.gradle이 있으면 그 내용을 상속받게 된다.
모든 모듈이 같은 의존성 설정을 가져도 괜찮다면 프로젝트 루트에 있는 build.gradle 하나의 설정을 모든 모듈이 이용할 수 있다.

출처: ChatGpt
profile
백엔드 개발자가 되려고 준비하고 있습니다

0개의 댓글