5 minute read

그래들(Gradle)

Gradle은 Java와 다른 프로그래밍 언어의 프로젝트를 빌드하고 관리하기 위한 오픈 소스 빌드 자동화 도구이다 .

요약

: dependencies {} 블록에 선언된 라이브러리가 프로젝트에서 사용될 때 자동으로 해당 라이브러리를 다운로드하고 클래스 경로에 추가한다. 이를 통해 프로젝트의 의존성 관리가 편리해지며 외부 라이브러리를 쉽게 사용할 수 있게 된다.

<!-- // 라이브러리 및 모듈을 정의하는 부분 -->
<!-- dependencies-추가하고자 하는 라이브러리를 편리하게 넣을 수 있다. -->
dependencies {
  <!-- Spring MVC를 사용한 RESTful서비스를 개발하는데 사용. -->
	implementation 'org.springframework.boot:spring-boot-starter-web'
	<!-- JUnit 전용 -->
  testImplementation 'org.springframework.boot:spring-boot-starter-test'  
}

그래들(Gradle) 설치

  1. 그래들 공식홈페이지에서 OS에 맞도록 설치

    # 윈도우
    https://gradle.org/releases/ # zip
    
    # 리눅스
    https://gradle.org/releases/ # tar
        
    
  2. 그래들홈(GADLE_HOME) 설정
     # 윈도우
     # 제어판 > 시스템 > 고급 시스템 설정 > 환경변수 - 시스템변수(새로만들기) 클릭
     C:\Users\MT01301\.gradle\wrapper\dists\gradle-7.6-bin\9l9tetv7ltxvx3i8an4pb86ye\gradle-7.6
        
     # 리눅스 
     export GADLE_HOME=/opt/gradle/gradle-버전
     source ~/.bashrc
        
    
  3. 패스(GRADLE_HOME + /bin) 설정

     # 윈도우 > PATH
     C:\Users\MT01301\.gradle\wrapper\dists\gradle-7.6-bin\9l9tetv7ltxvx3i8an4pb86ye\gradle-7.6\bin
        
     # 리눅스  
     export PATH=$PATH:$GRADLE_HOME/bin
     source ~/.bashrc
    
    
  4. 완료
     gradle -v   # 정상이면 정보가 출력된다
        
    

그래들(Gradle) 기본 사용법

STEP1. 어플리케이션 생성

# 1. Gradle 프로젝트를 생성할 폴더 생성
mkdir gradle-study

# 2. init 옵션을 통해서 project 기본 파일과 폴더를 생성한다.  
cd gradle-study
gradle init
# gradle init --type java-application  #(한번에 자바프로젝트 생성 진행하는 방법)

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 2

basic: 기본 프로젝트 타입, 수동으로 구성해야 함
application: java application 타입, App.java 파일을 포함
library: java library 타입, Library.java 파일을 포함
Gradle plugin: java로 구현 된 gradle 플러그인 타입

# 3. 프로젝트 언어 설정
Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Swift
Enter selection (default: Java) [1..5] 3

# 4. 싱글모듈, 멀티모듈 프로젝트 설정
Split functionality across multiple subprojects?:
1: no - only one application project
2: yes - application and library projects
Enter selection (default: no - only one application project) [1.. 2] 1

# 5. DSL 설정(Gradle 스크립트를 작성할 언어)
Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

# 이후 새로운 API 를 사용해서 build 를 생성하겠냐는 질문에 기본 값을 선택. (새로운 API 가 어떤 변경이 있는지 잘 모름..)
Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no]no

# 6. 테스트 프레임워크 선택
# 익숙한 JUnit 4 선택한다.
Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4] 1

이후 프로젝트 이름 설정이 나오는데 이 부분은 생략한다.

STEP2. 실행

: Project를 실행하기 위해 gradle run 을 수행한다. 예상 결과는 다음과 같다.

# 예상 흐름
1. gradle run 명령어 입력
2. gradle-study\app\src\main\java\gradle\study\App.java 자바파일 실행
3. "Hello Java" 정상 수행

STEP3. 실행(폐쇄망 환경)

내 환경에서 실제로 해보니 아래와 같은 에러가 발생했다.


gradle run   # 폐쇄망에서 에러 발생

폐쇄망에서는 gradle 을 통해 레파지토리에서 받지 못하도록 해야하므로 아래 빌드 내용을 지워준다

cd gradle-study\app\
vi bulid.gradle

dpendencies {
    // 외부를 참조하는 implementation 항목을 제거
}

재시도 하면 정상작동 하는 것을 확인할 수 있다.

gradle run

> Task :app:run
Hello World!

BUILD SUCCESSFUL in 4s
2 actionable tasks: 2 executed
<-------------> 0% WAITING
> IDLE

build.gradle 디폴트 내용

: 최소한의 Gradle 소스코드는 다음을 참고하면 된다.

plugins {
	id 'java'   # 사용하는 언어
	id 'org.springframework.boot' version '3.0.2' # 프로젝트의 스프링부트 프레임워크의 버전설정
	id 'io.spring.dependency-management' version '1.1.0' # 프로젝트에 필요한 라이브러리를 관리해주는 툴(매니지먼트)의 버전 
}

group = 'com.god'  # 프로젝트정보
version = '0.0.1-SNAPSHOT' # 첫번째 자리 : 메이저 업데이트, 두번째 자리 : 마이너업데이트, 세번째 자리 : fix버전(오탈자, 이미지 변경)
sourceCompatibility = '17'  # 자바버전 

# dependencies 라이브러리를 다운받은 사이트 
repositories {
	mavenCentral()
}

# dependencies-추가하고자 하는 라이브러리를 편리하게 넣을 수 있다. 
dependencies {

  # compile : 자바코드를 실행가능한 바이트 코드로 변경 (바이트코드를 실행하면 컴퓨터는 인식하고 실행) 
  compileOnly 'org.projectlombok:lombok'  # 롬복: 도메인(class)이 가져야할 getter, setter, builder등을 자동으로 코드생성 (@어노테이션) (단,컴파일에서만!) 
	annotationProcessor 'org.projectlombok:lombok:'

	implementation 'org.springframework.boot:spring-boot-starter-web'  # Spring MVC를 사용한 RESTful서비스를 개발하는데 사용. 
	testImplementation 'org.springframework.boot:spring-boot-starter-test'  # JUnit 전용
}

tasks.named('test') {
	useJUnitPlatform()
}

그래들(Gradle) 기본 패키징 방법

jar파일 패키징 생성

# 그래들 프로젝트 빌드 수행
gradle jar
BUILD SUCCESSFUL in 3s
2 actionable tasks: 1 executed, 1 up-to-date

# [루트]build/libs/ 안에 jar 파일이 생성된다.
# [루트]/build/libs/app.jar

프로젝트를 패키징하여 필요한 JAR 파일을 생성한다. 이제 배포도 가능해졌다.

jar 패키징 실행

java -jar build\libs\app.jar

build\libs\app.jar에 기본 Manifest 속성이 없습니다.
# 이 명령어는 -jar 옵션을 사용하여 JAR 파일을 실행행다. 
# JAR 파일에는 메인 클래스(main class)가 META-INF/MANIFEST.MF 파일에 정의되어 있어야 한다.
# JAR 파일 내에 클래스 패스를 지정하는 것이 아니라, 해당 JAR 파일 안에 있는 메인 클래스를 실행한다. 
# JAR 파일에 내장된 라이브러리 또는 의존성을 사용하고자 할 때 편리하다. 

에러시 Manifest 속성을 아래와 같이 선언해주자.

cd gradle-study\app\
vi bulid.gradle

jar {
    manifest {
        attributes 'Main-Class': 'gradle.study.App' 
    }
}

# 재시도 한다.

# 정리 
$ gradle clean
BUILD SUCCESSFUL in 3s
1 actionable task: 1 executed
--------------------------------------------------------------
# 패키징 
$ gradle jar
BUILD SUCCESSFUL in 3s
2 actionable tasks: 1 executed, 1 up-to-date
--------------------------------------------------------------
# 실행
$ java -jar build\libs\myfirst-app.jar
Hello world!

지금까지 그래들(Gradle) 기본 사용방법을 알아보았다.

그래들(Gradle) 이클립스에서 사용법

STEP1. Gradle 어플리케이션 준비

신규생성 방식

  1. New > Other > Gradle Project
  2. Project name 설정 > Next.. Next….
  3. 완료

임포트(Import)방식

임포트 참고자료) https://javacan.tistory.com/entry/import-maven-project

  1. 그래들 스프링프로젝트 압축파일 준비.
  2. IDE 워크스페이스에 압축을 해제.
  3. File > Import > Existing Gradle Project (설치시 환경변수 잡았으므로 계속 NEXT)
  4. 완료

STEP2. settings.gradle 설정

// 프로젝트명과 루트 프로젝트 이름을 일치시켜야 한다. (저장후 STS 를 재시작!)
rootProject.name = 'ucb-back' //루트 프로젝트명

STEP3. Run Configurations 설정

메인어플리케이션.java 찾는 방법)
@SpringBootApplication 어노테이션이 존재하는 java 파일이다.

  1. 자동 생성
    • 메인어플리케이션.java 우클릭 > Run As > 4 Spring Boot App
      자동으로 Run Configurations 생성 완료
      
  2. 수동 설정
    실행 환경별 프로퍼티스 Override 를 위해 아래 설정을 진행.
    • 메인어플리케이션.java 우클릭 > Run Configuration.. -Spring Boot App - Spring Boot 탭
      • Project 콤보박스: ucb
      • main Type 텍스트박스: in.kbfg.ucb.UcbApplication
      • Profile 콤보박스: local

        이 콤보박스는 네이밍별 프로퍼티스가 존재하면 선택가능하다.

        예시)
        application-local.properties
        application-stg.properties

    • 인어플리케이션.java 우클릭 > Run Configuration.. -Spring Boot App - Arguments 탭
      • Program arguments
          start
        
      • VM arguments
          -Dspring.profiles.active=local
        

STEP4. 실행

: 최종 실행(RUN)! 어플리케이션을 실행한다. (application.properties 에서 DocBase 를 확인하고 컨트롤러 요청한다!.)

// 부트에서 아래 설정이 DocBase 개념
server.servlet.context-path=   //예시) /api

그래들(Gradle)에서 로컬레파지토리 사용하기(메이븐 활용편)

  • 개발을 하다보면 효율적으로 누군가 만들어 놓은 라이브러리들을 가져다 쓴다.
  • 자바(스프링)으로 개발을 한다면 보통 빌드 툴(Gradle, Maven)을 사용하여 라이브러리 관리를 한다.
  • 원격 저장소(MavenCentral, Jcenter, google, …etc)에서 필요한 라이브러리들을 다운받아서 로컬 저장소 (Gradle : ~/.gradle 폴더, Maven : ~/.m2 폴더)에 저장한다.
  • 로컬 저장소에서 찾고 없으면 원격 저장소에서 다운 받는다.

(작성중)

링크1
링크2
링크3

Leave a comment