http://blog.jetbrains.com/kotlin/2016/05/gradle-meets-kotlin/

그레이들이 코틀린Kotlin을 DSL 로 사용하게 되면 그루비는 찬밥...이 되겠다. @_@)>

그루비보다는 코틀린을 익혀야할 분위기가 무루 익어가고 있다.


GVM(Groovy enVironment Manager) 설치방법

○ 설명

Ruby에는 RVM 과 rbenv라고 하는 도구가 광범위하게 사용되고 있다. 이 도구들을 통해서 루비를 설치하고 개발하고 실행하는데 필요한 환경을 구축하고 있다. Groovy에서도 이와 유사한 도구인 GVM(Groovy enVironment Manager,http://gvmtool.net/)라고 하는 도구를 제공하고 있다.

GVM은 대부분의 유닉스 기반 시스템에서 다양한 소프트웨어 개발도구들의 버전을 관리하는 도구다. 커맨드라인인터페이스(CUI 혹은 터미널)에서 설치, 전환, 제거 및 다른 후보자들에 대한 목록을 관리한다.

현재 제공하고 있는 대상들로는:

  • Groovy
  • Grails
  • Griffon
  • Gradle
  • Groovyserv
  • Lazybones
  • vert.x
  • Crash
  • Glide
  • Gaiden
  • JBake
  • Springboot

등이 있으며, Groovy를 대상으로 하는 제공대상들을 확대해갈 예정이다.
실행되는 플랫폼은 다음과 같다:

  • 리눅스
  • 맥OS
  • Cygwin
  • Solaris
  • FreeBSD

GVM은 bash를 사용하고 여러분의 시스템에서 가능한한 curl unzip에만 의존하도록 되어있다. 설치가 진행되기에 앞서 이미 설치가 되어있는지를 점검할 것이다. 여러분의 홈디렉토리 아래에 .gvm 이라고 하는 폴더가 생성되어 있다면, 등록되어 있는 지원대상들을 설치할 것이다.

○ 설치

설치하는 방법은 간단하다. 선호하는 bach 터미널을 열고 다음과 같이 입력한다.

curl -s get.gvmtool.net | bash

GVM이 실행되는데 필요한 요소들이 설치가 진행되면서 이와 관련한 내용들이 화면에 출력할 것이다. 경우에 따라서는 재시작을 요청할 수도 있다. 혹은 gvm-init.sh라고 하는 스크립트를 실행하여 환경을 설정하도록 요청하기도 한다.

$ ~/.gvm/bin/gvm-init.sh

○ 사용

GVM 사용하는 방법을 확인하는 방법은 간단하다.

$ gvm install <candidate: ex) groovy, springboot ...>

지금 내가 GVM을 통해서 설치한 gradle, groovy, springboot는 다음과 같다.



GVM의 설정과 관련된 파일은 ~/.gvm/etc/config 파일이다.

# make gvm non-interactive, great for CI environments
gvm_auto_answer=false/true

# prompt user to selfupdate on new shell
gvm_suggestive_selfupdate=true/false

# perform automatic selfupdates
gvm_auto_selfupdate=true/false

의 내용으로 설정이 가능하고, 실제로 설정된 것은 다음과 같다.

그레들gradle, 그루비groovy와 스프링부트springboot를 실행하는데 필요한 환경설정에 대한 부담이 확 줄어드니~ gvm으로 대동단결!!

Gradle에서 참조표현(Reference expression, ${variable}) 사용하기

요즘 이해력이 많이 딸린다. 하아.
역시 책과 레퍼런스를 살펴보는 것이 제일 좋군.

groovy를 기반으로 작성되는 대부분의 문자열은 작은 따옴표(‘’)를 사용한다. 이 문자열은 GString을 사용할 수 없다.

이 내용이 나의 삽질을 야기시켰다.

ext {
    versions = [
      springframework: '4.0.3.RELEASE'
    ]
}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.5'
    compile 'org.springframework:spring-core:${versions.springframework}'
    testCompile 'junit:junit:4.11'
}

위의 내용으로 작성하면 어떻게 될까?

$ gradle dependencies

문제가 생긴다. ㅡ_-)> 화면에서 보는 것처럼, 내가 생각했던 것과는 다르게 ${versions.springframework}에 ‘4.0.3.RELEASE’가 주입되지 않는다. 그냥 문자열 그대로 나온다.

왜 그런거냐!!!

라고 분노하며 내팽개쳤다가 최근에 다시 꺼내어 살펴보았다. 이제는 마음의 여유가 있는지라 왜 그런지 경우를 하나하나 살펴봤다.

사실, 참고서적과 API를 봤다면 수월하게 이해하고 넘어갔을 텐데… 지금까지도 남아있는 일단 실행해보고 보자.

라는 안일함이 나의 시간을 허비 시켰다. 허어…

Groovy and GString 을 살펴보면 GString이라고 하는 항목을 볼 수 있다. 이 GString이 적용되는 것은 큰 따옴표(“”)에 사용했을 때다.

하아… 바보다.

ext {
    versions = [
      springframework: '4.0.3.RELEASE'
    ]
}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.5'
    compile "org.springframework:spring-core:${versions.springframework}"
    testCompile 'junit:junit:4.11'
}


잊지말자!

참조표현(${})를 사용하기 위해서는 큰 따옴표(“”)를 이용해서 문자열을 선언해야 GString으로 인식되어 처리한다는 것을!!




프로그래밍 그루비

저자
디에크 쾨니히, 기욤 라포르쥬, 앤드루 글러버, 폴킹, 존 스킷 지음
출판사
인사이트 | 2009-03-02 출간
카테고리
컴퓨터/IT
책소개
프로그래밍 그루비 는 그루비의 문법과 사용하는 법을 이해하기 쉽...
가격비교 글쓴이 평점  

짬짬이 그루비Groovy를 살펴보기 시작했다. 순 그레들gradle을 능숙하게 다루기 위한 목적으로 살펴보고 있는데,
그루비가 가지고 있는 매력도 상당하다.

Type plus(Type type) {} 를 재정의하니까 다른 형태로 동작한다.

package kr.pe.ihoney.groovy.study.begin

class Money {
    private int amount
    private String currency

    Money(int amount, String currency) {
        this.amount = amount;
        this.currency = currency;
    }

    /**
     * 재정의된 plus(+) 연산자
     * @param other
     * @return
     */
    Money plus(Money other) {
        assert null != other
        if(other.currency != currency)
            throw new IllegalArgumentException("Cannot add $other.currency to $currency");

        return new Money(amount + other.amount, currency);
    }

    @Override
    public int hashCode() {
        amount.hashCode() + currency.hashCode()
    }

    @Override
    public boolean equals(Object other) {
        if(null == other) return false
        if(!(other instanceof Money)) return false
        if(currency != other.currency) return false
        if(amount != other.amount) return false
        return true
    }
}
package kr.pe.ihoney.groovy.study.begin;

import static org.junit.Assert.*;

import org.junit.Test;

class MoneyTest {

    Money money

    @Test
    public void test() {
        def bulk = new Money(1000, "WON")
        assert bulk
        assert bulk == new Money(1000, "WON") //재정의된 ==(equals) 연산자 사용
        assert bulk + bulk == new Money(2000, "WON") // 재정의된 +(plus) 연산자 사용
    }

}


스프링 등 다양한 라이브러리에서 Groovy DSL을 지원하고, 그레들gradle 사용도 늘어나면서 그루비Groovy(http://groovy.codehaus.org/)를 학습해야겠다는 생각에 프로젝트를 생성했다.

  • rocking-the-groovy - github
    gradle init --type groovy-library
    
    로 생성한 프로젝트를 이클립스에 import 하고 실행하려고 해도 정상적으로 인식이 안되는 문제에 봉착했다(지금 생각하면 매우 간단한 문제였는데… 역시 기초는 중요하다).

수동으로 환경설정을 하면 어찌어찌 실행할 수 있게 되기는 했는데 왜 그랬는지 풀 수 있는 방법을 알고 싶었다.

그러다가 문득…

‘eclipse’ 플러그인을 넣었던가?

하는 생각이 스쳐지나간다. .gitignore 내에는 이클립스와 인텔리제이에서 생성하는 생성물들에 대한 목록은 추가시켜놓고, 정작 build.gradle 에다가 이클립스 플러그인을 넣었던가? ㅡ_-)?


아니나 다를까…
추가하고 다시 프로젝트를 임포트 하니 정상적으로 동작한다.
하아. 머리가 나쁘면 몸이 고생한다더니...

+ Recent posts