7. Running your Application with Gradle

먼저 압축파일를 빌드하지 않고 애플리케이션을 실행하려면 bootRun 태스크를 사용하세요:

  $ ./gradlew bootRun

bootRun 태스크는 JavaExec 하위 클래스인 BootRun의 인스턴스이다. 따라서, 그레이들에서 자바 프로세스를 실행하기 위한 일반적인 구성 옵션을 사용할 수 있다. 태스크는 메인 소스 세트(main source set)의 런타임 클래스 경로를 사용하도록 자동 구성된다.

기본적으로, 메인(main) 클래스는 태스크의 클래스 경로에 있는 디렉토리에서 public static void main(String[]) 메서드가 있는 클래스를 찾아 자동 구성된다.

기본 클래스는 태스크의 main 프로퍼티를 사용하여 명시적으로 구성할 수도 있다:

Groovy

  tasks.named("bootRun") {
    mainClass = 'com.example.ExampleApplication'
  }

Kotlin

  tasks.named<BootRun>("bootRun") {
    mainClass.set("com.example.ExampleApplication")
  }

또는, 스프링 부트 DSL의 mainClass 프로퍼티를 사용하여 메인(main) 클래스 이름을 프로젝트 전체에서 구성할 수 있다:

Groovy

  springBoot {
    mainClass = 'com.example.ExampleApplication'
  }

Kotlin

  springBoot {
    mainClass.set("com.example.ExampleApplication")
  }

기본적으로, bootRun은 개발 중에 더 빠른 시작을 위해 실행을 최적화하도록 JVM을 구성한다. 이 동작은 다음 예제와 같이, optimizeLaunch 프로퍼티를 사용하여 비활성화할 수 있다:

Groovy

  tasks.named("bootRun") {
    optimizedLaunch = false
  }

Kotlin

  tasks.named<BootRun>("bootRun") {
    isOptimizedLaunch = false
  }

application 플러그인이 적용된 경우, mainClass 프로퍼티를 구성해야 동일한 용도로 사용할 수 있다:

Groovy

  application {
    mainClass = 'com.example.ExampleApplication'
  }

Kotlin

  application {
    mainClass.set("com.example.ExampleApplication")
  }

7.1. Passing Arguments to your Application

JavaExec의 모든 태스크들과 마찬가지로, 그레이들 4.9 이상 버전을 사용할 때 --args='<arguments>'를 사용하여 명령줄에서 bootRun으로 인수를 전달할 수 있다. 예를 들어, dev라는 프로파일(profile)이 활성 상태인 애플리케이션을 실행하려면 다음 명령을 사용할 수 있다:

  $ ./gradlew bootRun --args='--spring.profiles.active=dev'

자세한 내용은 JavaExec.setArgsString에 대한 자바독(javadoc)을 참조하자.

7.2. Passing System properties to your application

bootRun은 표준 JavaExec 태스크이므로, 빌드 스크립트에서 시스템 프로퍼티를 지정하여 애플리케이션의 JVM에 시스템 프로퍼티를 전달할 수 있다. 구성 가능한 시스템 프로퍼티 값을 만들려면 프로젝트 프로퍼티를 사용하여 해당 값을 설정한다. 프로젝트 프로퍼티를 선택 사항으로 허용하려면, findProperty를 사용하여 참조하자. 이렇게 하면 다음 예와 같이 ?: 엘비스(Elvis) 연산자를 사용하여 기본값을 제공할 수도 있다:

Groovy

  tasks.named("bootRun") {
    systemProperty 'com.example.property', findProperty('example') ?: 'default'
  }

Kotlin

  tasks.named<BootRun>("bootRun") {
    systemProperty("com.example.property", findProperty("example") ?: "default")
  }

앞의 예제는 com.example.property 시스템 프로퍼티를 example 프로젝트 프로퍼티 값으로 설정한다. 예제 프로젝트 프로퍼티가 설정되지 않은 경우 시스템 프로퍼티의 값은 default가 된다.

그레이들을 사용하면 다음 예제와 같이 -P 플래그를 사용하는 명령줄을 포함하여 다양한 방법으로 프로젝트 프로퍼티를 설정할 수 있다:

  $ ./gradlew bootRun -Pexample=custom

앞의 example 프로젝트 프로퍼티의 값을 custom로 설정한다. 그러면 bootRuncom.example.property 시스템 프로퍼티의 값으로 사용한다.

7.3. Reloading Resources

devtools이 프로젝트에 추가된 경우 애플리케이션의 클래스패스(classpath)에서 변경 사항을 자동으로 모니터링한다. 수정된 파일은 devtools로 재 로딩을 트리거하기 위해 업데이트할 클래스패스에 대해 다시 컴파일해야 하는 것을 알아두자. devtools 사용에 대한 자세한 내용은 레퍼런스 문서의 이 섹션을 참조하자.

또는, 애플리케이션의 스태틱(static) 리소스가 소스 위치에서 로드되도록 bootRun을 구성할 수 있다:

`Groovy`

tasks.named(“bootRun”) { sourceResources sourceSets.main }

`Kotlin`

tasks.named("bootRun") { sourceResources(sourceSets["main"]) } ```

이렇게 하면 라이브 애플리케이션에서 다시 로드할 수 있으므로 개발 시 도움이 될 수 있다.