명령행에서 스프링 프로젝트를 구성할 수 있는 springboot cli 사용법

Spring Boot cli 는 command line  도구로 빠르게 스프링 개발 환경을 구성할 수 있습니다.

Spring Boot cli 설치는 SDKMan 을 사용해서 설치하면 됩니다.

$ sdk install springboot


사용하기

설치가 끝났으면 spring 이라는 명령어로 실행해 보면 됩니다.

$ spring

usage: spring [--help] [--version] 
       <command> [<args>]

Available commands are:

  run [options] <files> [--] [args]
    Run a spring groovy script
...

help 명령어 뒤에 command 를 지정하면 상세 옵션을 볼 수 있으며 다음은 새로운 스프링 프로젝트를 생성하는 init 명령어의 상세 사용법을 표시합니다.

$  spring help init
spring init - Initialize a new project using Spring Initializr (start.spring.io)

usage: spring init [options] [location]

Option                       Description                                       
------                       -----------                                       
-a, --artifactId <String>    Project coordinates; infer archive name (for      
                               example 'test') 


app 실행

Groovy 소스를 run 명령어로 바로 실행할 수 있습니다. spring boot cli 를 사용하면 외부 의존성도 다 결정해 주므로 groovy 를 직접 설치하지 않아도 됩니다.

 Click here to expand...
hello.groovy
@RestController
class WebApplication {

    @RequestMapping("/")
    String home() {
        "Hello World!"
    }

}


다음 명령어로 그루비 app 을 직접 실행할 수 있습니다.

$ spring run hello.groovy

Resolving dependencies.............................

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.5.2)


기본 포트인 8080 대신 다른 포트를 사용하려면 spring boot 에 포트 옵션을 전달해야 합니다.

스프링 부트에 전달할 옵션은 대시를 2 개 사용 한후에 전달할 옵션을 지정하면 되며 다음은 port 를 9000 으로 사용합니다.

$ spring run hello.groovy -- --server.port=9000


신규 프로젝트 생성

init 명령어를 사용하면 Spring initialzr(https://start.spring.io/) 의 기능을 쉘에서 바로 실행할 수 있습니다.

다음은 maven 기반으로 3 가지 의존성을 가진 spring boot 프로젝트를 생성합니다.

$ spring init --dependencies=web,lombok,data-jpa my-awesome-project


지원 기능 보기

init 에서 지원 가능한 모든 기능을 보려면 --list 옵션을 사용하면 됩니다.

$ spring init --list

:: Service capabilities ::  https://start.spring.io

Supported dependencies
+--------------------------------------+--------------------------------------------------------------+--------------------------------+
| Id                                   | Description                                                  | Required version               |
+--------------------------------------+--------------------------------------------------------------+--------------------------------+
| activemq                             | Spring JMS support with Apache ActiveMQ 'Classic'.           |                                |
|                                      |                                                              |                                |
| actuator                             | Supports built in (or custom) endpoints that let you monitor |                                |
|                                      | and manage your application - such as application health,    |                                |
|                                      | metrics, sessions, etc.                                      |                                |
|                                      |                                                              |                                |
| amqp                                 | Gives your applications a common platform to send and        |                                |
|                                      | receive messages, and your messages a safe place to live     |                                |
|                                      | until received.                                              |                                |


신규 프로젝트 생성

--list 옵션 출력 맨 뒤에 기본 설정이 있으므로 기본 설정을 변경하지 않을 경우 생략해도 됩니다.

 Click here to expand...
Project types (* denotes the default)
+-----------------+------------------------------------------+-----------------------------+
| Id              | Description                              | Tags                        |
+-----------------+------------------------------------------+-----------------------------+
| gradle-build    | Generate a Gradle build file.            | build:gradle,format:build   |
| gradle-project  | Generate a Gradle based project archive. | build:gradle,format:project |
| maven-build     | Generate a Maven pom.xml.                | build:maven,format:build    |
| maven-project * | Generate a Maven based project archive.  | build:maven,format:project  |
+-----------------+------------------------------------------+-----------------------------+


Parameters
+-------------+------------------------------------------+------------------------------+
| Id          | Description                              | Default value                |
+-------------+------------------------------------------+------------------------------+
| artifactId  | project coordinates (infer archive name) | demo                         |
| bootVersion | spring boot version                      | 2.5.2                        |
| description | project description                      | Demo project for Spring Boot |
| groupId     | project coordinates                      | com.example                  |
| javaVersion | language level                           | 11                           |
| language    | programming language                     | java                         |
| name        | project name (infer application name)    | demo                         |
| packageName | root package                             | com.example.demo             |
| packaging   | project packaging                        | jar                          |
| type        | project type                             | maven-project                |
| version     | project version                          | 0.0.1-SNAPSHOT               |
+-------------+------------------------------------------+------------------------------+

주의할 점은 camel case 인 Id 를 커맨드 라인에서 전달할 경우 slug 방식으로 변경해야 한다는 것입니다.

예로 packageName 을 커맨드 라인에서 변경할 경우 --package-name 처럼 적어줘야 합니다.


다음은 JDK 16 을 사용하는 gradle 기반 web 프로젝트를 생성합니다.

$ spring init --build=gradle --format=project --java-version=16 --dependencies=web --packaging=jar --package-name=com.lesstif.demo my-new-project


같이 보기

Ref