프로그래밍 공부/Gradle

Gradle Ant,maven에서 그레이들 변환, Gradle에서 Ant,maven 사용, 배포

Wonuk 2021. 9. 11. 23:37
반응형
Gradle의 모든 포스팅은 유튜브 프리렉을 기반으로 작성되었습니다.



링크 : https://www.youtube.com/watch?v=s-XZ5B15ZJ0&list=PL7mmuO705dG2pdxCYCCJeAgOeuQN1seZz

 

강의의 버전이 옛버전 이기 때문에 이론적인 부분만 학습하는것이 좋습니다.

 


 

빌드 관리 도구의 역사

Make : 1970~80년대 사용 C기반의 빌드 체계(스크립트)

Ant : 2000년대 Sun사의 JAVA빌드를 위한 Ant 현재까지도 사용되는곳이 있다.(XML기반)

Maven : 4~5년후 XML기반인 Maven출 시 기존 Ant에 비해서 성능적인 향상, 개선을 통해 많이 사용되지만

           복잡하고 배우기 어렵다는 가장 큰 단점이 있다.

Gradle : 2007년경 Gradle 프로젝트가 시작되었고 2013년도에 안드로이드 애플리케이션 공식 빌드 시스템으로 채택

           (스크립트) Gradle은 처리기반의 비효일적인 부분들을 개선하였고 XML의 복잡함을 극복하고 성능을

           향상시키고 유연함을 가지고 있다.

 


그레이들은 Ant로 기술된 빌드 스크립트를 통합할 수 있다.

 

그레이들에서 앤트 사용

 

Gradle에서 제공하는 Ant task 사용

 Ant task를 사용하면 Ant의 빌드구조를 통합할 수 있고, 구문 정보를 이해할 수 있고,

bulid.xml을 직접 그레이들 프로제트로 가져와서 사용할 수 있다.

그레이들은 내부적으로 엔트빌더 라는 인스턴스를 참조하고 있고 Ant task의 유형 특성에 대해서

Ant에 build.xml 형식의 그루비 문법을 이용하여 맵핑할 수 있는 기능을 제공한다.

ant.echo 메소드를 호출하여 ant에 작업되어 있는 내용을 실행 할 수 있다.

 

build.gradle 파일

task exeTask {
    doLast {
        ant.echo('hello from Ant')
        ant.zip(destfile: 'archive.zip'){ // 압축파일 생성 기능
            fileset(dir:'src')
                exclude(name: '**.xml')
                include(name: '**.java')
        }
    }
    
    def path = ant.path { // 관련 파일의 경로 지정
        filesset(dir:'src', includes:'*.java')
    }
    
    path.list().each { 
        println it
    }
}

 

gradle exeTask 실행결과

해당 경로를 확인해보면 archive.zip파일이 하나 생성되어있다.

 

 

Gradle에서 Ant를 사용하는 방법 2가지

위로가는 화살표 방법은 Gradle에서 제공해주는 기능을 이용하여 Ant로 구현된 내용을 Gradle로 변환하는 방법

아래로가는 화살표 방법은 Ant로 구성된 build.xml파일을 가져다가 Gradle에서 활용하는 방법

 

 

 

임의의 프로젝트 생성후 build.xml파일을 만들고 gradle에 build.gradle파일에서 build.xml파일을 인식해보자.

 

Ant에 build.xml파일 생성

<project>
    <target name="exeTask">
        <echo>To Gradle From build.xml of Ant</echo>
    </target>
</project>

XML기반의 태그로 구성되어 있는것을 볼 수 있다.

 

build.gradle파일 생성

// ant의 build.xml 파일 import
ant.importBuild 'build.xml'

build.xml을 인식해서 빌드를 수행할 수 있다.

 

gradle exeTask 실행결과

내부적으로는 Ant Task를 호출하기 전에 엔트빌더의 인스턴스가 호출되면서 생성된

Ant task 객체가 ant.echo를 호출해서 관련내용이 출력된다.

 

 

엔트의 build.xml파일의 exeTask를 그레이들의 build.gradle에서 의존관계를 지정하여 사용하는 방법

// build.xml파일 작성내용
<project>
    <target name="exeTask">
        <echo>To Gradle From build.xml of Ant</echo>
    </target>
</project>


// build.gradle 파일 작성내용
// ant의 build.xml 파일 import
ant.importBuild 'build.xml'

// Gradle 타스크 정의
task gradleTask(dependsOn: exeTask) { // exeTask 의존관계 지정 
    doLast {
        println 'This is Gradle User Task'
    }
}

 

gradle gradleTask 실행결과

의존관계에 의해서 build.xml의 타겟으로 지정되어 있던 exeTask의 내용이 먼저 출력된다.

 

 

build.xml을 수정하여 Ant에서 gradle task에 의존관계를 형성

// build.xml파일 작성내용
<project>
    <target name="exeTask" depends="gradleTask">
        <echo>To Gradle From build.xml of Ant</echo>
    </target>
</project>


// build.gradle 파일 작성내용
// ant의 build.xml 파일 import
ant.importBuild 'build.xml'

// Gradle 타스크 정의
task gradleTask {
    doLast {
        println 'This is Gradle User Task'
    }
}

 

gradle exeTask 실행결과

gradleTask가 먼저 실행된다

 

 

지금까지 build.xml파일을 gradle에서 어떻게 불러와서 사용하는지에 대해 살펴보았다

build.xml에서 수행되는 빌드 수행내용을 어떻게 gradle에서 사용하고

결과는 어떻게 나오는지 확인해보자.

 

 

 

임의의 프로젝트 생성 후 src 디렉터리 생성 후 임의로 java파일들을 만들어보자

 

build.xml파일 작성

이 build파일의 역할은 java파일을 만들기 위한 기능을 수행하는 build.xml

해당 경로에 지정되어있는 컴파일을 수행하도록 되어있고,

컴파일이 수행된것에 대해서 jar파일을 만들도록 지정되어있다.

 

 

build.gradle파일

ant.importBuild 'build.xml'

 

gradle jar 실행결과

해당 디렉터리에 해당 클래스 파일들이 컴파일 되면서 jar파일도 생성되는것을 확인할 수 있다.

 

 

 

build.gradle 파일에서 build.xml에 설정되어있는 속성정보도 접근하여 사용할 수 있다.

<!-- Ant property --> 부분을 사용 가능

ant.importBuild 'build.xml'

task exeTask( dependsOn: "jar") { // jar파일을 의존관계 설정
    // 속성들을 출력
    println "ant version :" + ant.properties.version
    println "ant src :" + ant.properties.src
    println "ant build :" + ant.properties.build
    println "ant gradle :" + ant.properties.gradle
    
    // 속성값 설정 가능
    ant.properties.version = "2.0"
    
    println "ant version 2: " + ant.properties.version
}

 

gradle exeTask 실행결과


그레이들에서 메이븐 사용

Ant와는 조금 다른방법을 사용해야 한다.

기본적으로 Gradle은 maven 프로젝트 구조를 사용할 수 있기 때문에 손쉽게 변환하여 사용할 수 있다.

 

gradle은 maven의 빌드시스템인 pom.xml을 변환하여 build.gradle이 포함된

새로운 gradle 프로젝트를 생성할 수 있다.

 

Gradle에서는 maven에서 사용하고 있는 plugin을 그대로 사용할 수 없기 때문에

maven에서 사용되는 plugin의 기능을 제공하는 gradle의 plugin을 찾아서 사용하게된다.

만약 제공되는 기능이 없다면 유사한 기능을 구현하거나 찾아서 구현해야하는 번거로움이 발생할 수 있다.

 

그레이들에서 메이븐을 사용하는 방법은 두가지가 있다.

 

 

 

1번 방법 : maven의 플러그인을 사용할 수 없기 때문에 이에 상응하는 기능을 제공하는 gradle 플러그인을 찾아서

              사용하는 방법

2번 방법 : pom.xml을 build.gradle로 변환하고 기능적으로 추가하거나 보완해야할 부분은 

              build.gradle에서 구현하는 방법

 

 

2번째 방법을 확인하기 위해 임의의 프로젝트를 생성

프로젝트에 pom.xml을 추가

pom.xml은 maven의 빌드 수행을 구성해놓은 빌드스크립트로 build.gradle과 같은기능을 수행하는 파일이다.

 

pom.xml파일

 

gradle init --type pom 실행결과

maven에서 gradle로 conversion이 된 모습을 확인할 수 있다.

settings.gradle 파일과 build.gradle파일이 생성된것을 확인해 볼 수 있다.

 

pom.xml과 build.gradle파일을 비교해보자

pom.xml

build.gradle

 

pom.xml파일을 기반으로 생성된것을 확인할 수 있다.

 

만약 미변환된 부분이나 지원되지 않는 부분에 대해서는 확인해서 추가 구현해서 적용해야 한다.

또한, 멀티프로젝트일 경우에도 변환이 가능하다.

 

빌드 수행결과

 

 

임의의 pom.xml파일을 build.gradle로 변환하기

 

 


그레이들에서 배포하기

pom.xml에 지정된 배포관련 구조를 gradle에서 pom.xml을 이용하여 maven처럼 인스톨 명령어를 이용하여

로컬저장소로 배포하는 방법이 있다.

 

그전에 키워드먼저 알아보자

 

 

wrapper task를 이용하여 배포하는 방법도 있다.

 

 

 

 

로컬저장소에 배포된 라이브러리나 플러그인을 사용하여

다른프로젝트에서도 빌드 수행에 사용할 수 있다.

build.gradle파일

로컬저장소에 배포된 plugin사용

buildscript구문 확인

 


강의 내용이 책을 기반으로 한것이기 때문에 책이 없는 필자에게는

전체 내용이 나오지 않아 답답하고 잘 이해되지 않으며 버전이 워낙 구버전이라 참고하기가 힘든 자료가 될것같다.

한번 훑어본것으로 만족하자

 

 

 

반응형