행복한 아빠

[Grails1.0 사용자 가이드] 4. 명령어 본문

Grails

[Grails1.0 사용자 가이드] 4. 명령어

행복한아빠 2008. 2. 29. 19:42


4. 명령어

Grails 명령어 시스템은 Gant로 만들었다. Gant는 Apache Ant를 간단하게 Groovy로 포장한 것(wrapper)이다.

여하튼 Grails는 이것을 편리하게 사용할 수 있도록 만들어 단순한 Gant가 아닌 grails 명령어로 취급한다. 명령어는 다음 형식으로 입력한다.

grails [command name]

Grails는 명령어를 실행하기 위해 아래 디렉토리를 검색한다.

  • USER_HOME/.grails/scripts
  • PROJECT_HOME/scripts
  • PROJECT_HOME/plugins/*/scripts
  • GRAILS_HOME/scripts

또한 Grails는 run-app와 같은 소문자 형태의 이름을 camel case로 변환한다. 따라서 다음과 같이 입력하면

grails run-app

검색 결과 다음과 같은 파일을 찾는다.

  • USER_HOME/.grails/scripts/RunApp.groovy
  • PROJECT_HOME/scripts/RunApp.groovy
  • PROJECT_HOME/plugins/*/scripts/RunApp.groovy
  • GRAILS_HOME/scripts/RunApp.groovy

만일 여러 개가 검색되었을 경우 Grails는 실행할 것 하나를 선택해 준다. Gant 스크립트가 실행될 경우 "default" target이 실행된다.

가능한 명령어의 목록과 약간의 도움말을 보기위해서는 다음과 같이 입력한다.

grails help

위 결과는 사용 방법과 Grails가 인식하는 명령어 목록을 출력한다.

Usage (optionals marked with *):
grails [environment]* [target] [arguments]*Examples:
grails dev run-app
grails create-app booksAvailable Targets (type grails help 'target-name' for more info):
grails bootstrap
grails bug-report
grails clean
grails compile
...
사용자 삽입 이미지
각 명령어의 더 자세한 정보는 Command Line 레퍼런스를 참조한다.


4.1 Gant 스크립트 생성
프로젝트 루트에서 create-script를 실행하면 개발자 자신의 고유한 Gant 스크립트를 생성할 수 있다. 예로 다음과 같이 입력한다.

grails create-script compile-sources

이 명령은 scripts/CompileSources.groovy 파일을 생성한다. Gant 스크립트는 "targets" 개념과 이것들의 의존관계를 지원한다는 점 빼고 일반 Groovy 스크립트와 비슷하다.

target(default:"The default target is the one that gets executed by Grails") {
    depends(clean, compile)
}
target(clean:"Clean out things") {
    Ant.delete(dir:"output")
}
target(compile:"Compile some sources") {
    Ant.mkdir(dir:"mkdir")
    Ant.javac(srcdir:"src/java", destdir:"output")
}

위 스크립트 예에서 보듯 스크립트에는 Apache Ant API를 접근할 수 있는 Ant 변수를 암묵적으로 포함하고 있다.

또한 위의 default target 예처럼 depends 메소드를 이용하여 다른 target에 의존(depend)할 수 있다.


4.2 Grails 스크립트 재사용
Grails는 좋은 명령어 기능들을 많이 제공하는데 이것들은 재사용하기 유용하다. 가장 유용한 몇 개의 명령어는 compile, pacakge 그리고 bootstrap 스크립트이다.

예로 bootstrap 스크립트는 데이터소스 접근 같은 것을 하는 Spring ApplcationContext 인스턴스를 초기로드(bootstrap)하게 한다.

Ant.property(environment:"env")                            
grailsHome = Ant.antProject.properties."env.GRAILS_HOME"
includeTargets << new File ( "${grailsHome}/scripts/Bootstrap.groovy" )
target ('default': "Load the Grails interactive shell") {
    depends( configureProxy, packageApp, classpath, loadApp, configureApp )
    Connection c
    try {
        // do something with connection
       c = appCtx.getBean('dataSource').getConnection()
    }
    finally {
        c?.close()
    }
}


4.3. 이벤트 후킹
Grails는 스크립팅 이벤트를 후킹할 수 있는 기능을 가진다. Grails target과 플러그인 스크립트가 실행되면서 이벤트를 발생한다.

그 메커니즘은 의도적으로 단순하고 느슨하게 지정하도록 되어있다. 가능한 이벤트 목록은 정해져 있지 않아 플러그인 스크립트에서 발생하는 이벤트도 잡을 수 있다. 이것을 위해 core target 스크립트에는 동일한 이벤트가 없다.

이벤트 핸들러 정의
플러그인의 scripts/ 디렉토리나 USER_HOME 디렉토리의 .grails/scripts/ 폴더에 있는 Events.groovy 파일에서 이벤트 핸들러를 정의한다. 이벤트가 발생할 때 마다 모든 이벤트 스크립트를 호출한다. 따라서 10개의 플러그인 핸들링 이벤트와 사용자별 고유 스크립트 이벤트 핸들링을 가질 수 있다.

이벤트 핸들러는 Events.groovy에 "event"라고 시작되는 이름의 block들로 정의한다. 기능을 시험해 보기 위해 아래 예제를 /sciprt 디렉토리에 넣을 수 있다.

eventCreatedArtefact = { type, name ->
    println "Created $type $name"
}eventStatusUpdate = { msg ->
    println msg
}eventStatusFinal = { msg ->
    println msg
}


여기에서 eventCreatedArtefact, eventStatusUpdate, eventStatusFinal 세 개의 핸들러를 볼 수 있다. Grails는 command line 레퍼런스 가이드 문서에 있는 몇 개의 표준 이벤트를 제공한다. 예를 들면 compile 명령어는 다음 이벤트들을 발생한다.

  • CompileStart: 컴파일 시작 시 호출, 컴파일 종류를 전달 - source 또는 tests
  • CompileEnd: 컴파일 종료 시 호출, 컴파일 종류를 전달 - source 또는 tests

이벤트 발생
이벤트를 발생하기 위해서는 단지 Init.groovy를 포함(include)하고 event closure를 호출한다.

Ant.property(environment:"env")
grailsHome = Ant.antProject.properties."env.GRAILS_HOME"
includeTargets << new File ( "${grailsHome}/scripts/Init.groovy" )
event("StatusFinal", ["Super duper plugin action complete!"])

공통 이벤트들
아래는 영향을 줄 수 있는 공통 이벤트이다.

이벤트 파라메터 설명
StatusUpdate message 현재 스크립트 상태나 진행절차를 나타내는 문자열 전달
StatusError message 현재 스크립트에서 발생한 에러 메시지를 나타내는 문자열 전달
StatusFinal message target이 완료되었을 때 마지막 상태 메시지를 나타내는 문자열 전달. 스크립트 환경에 target이 없더라도 전달
CreatedArtefact artefactType,artefactName create-xxx 스크립트가 끝나고 결과물(artefact)이 생성되고 호출
CreatedFile fileName Grails가 관리하는 파일을 제외하고 프로젝트 소스 파일이 생성될때마다 호출
Exiting returnCode 스크립트 환경이 깨끗하게 끝날 때 호출
PluginInstalled pluginName 플러그인을 설치한 후 호출
CompileStart kind 컴파일 시작 시 호출, 컴파일 종류를 전달 - source 또는 tests
CompileEnd kind 컴파일 종료 시 호출, 컴파일 종류를 전달 - source 또는 tests
DocStart kind 문서 생성을 위해 javadoc이나 groovydoc 시작할 때 호출
DocEnd kind 문서 생성을 위해 javadoc이나 groovydoc 끝날 때 호출
SetClasspath rootLoader classpath를 초기할 때 호출. 따라서 플러그은 rootLoader.addURL(...)을 이용하여 classpath에 추가할 수 있다. 이벤트 스크립트들이 로드된 후 classpath에 추가된다. 따라서 이벤트 스크립트에서 import가 필요한 클래스를 로드하기 위해서는 이 방법을 사용할 수 없다. 그러나 이름으로 클래스를 로드한다면 사용할 수 있다.
PackagingEnd 없음 패키징 맨 끝에 호출(Jetty 서버가 시작하기전 그리고 web.xml을 생성한 후 호출)
ConfigureJetty Jetty 서버 객체 Jetty 웹서버 초기 configuration 후 호출

4.4 개미와 달인^^(Ant and Maven)
Ant 통합
create-app로 Grails 애플리케이션을 생성할 때, Grails는 자동으로 다음 target들을 포함하는 Apache Ant build.xml 파일을 생성한다.

  • clean: Grails 애플리케이션 clean
  • war: WAR 파일 생성
  • test: 단위 테스트 실행
  • deploy: 기본으로는 비워 있음. 자동 배포를 구현하기 위해 사용할 수 있음

각 target은 Ant로 실행할 수 있다. 예를 들면 다음과 같다.

ant war

build.xml 파일은 Grails의 일반적인 명령어를 호출한다. 그리고 Grails와 CruiseControl이나 Hudson 같은 지속적인 통합(Continuous Integration)서버와 통합하는데 사용할 수 있다.

Maven 통합
Grails는 특별히 Maven을 지원하는 것이 없다. 그러나 별도로 Maven Tools for Grails라는 이름의 프로젝트가 있는데 Grails 프로젝트 밖으로 POM을 생성해 Maven 통합을 지원할 뿐만 아니라 Grails를 위한 Maven 라이프사이클 hook도 지원한다.

더 자세한 정보는 Maven Tools for Grails를 참조한다.

---
원문: 4. The Command Line

0 Comments
댓글쓰기 폼