Gradle - Gradle로 자바 프로젝트 만들기

2021. 4. 17. 17:07 Java 관련/Gradle

 

이번 포스팅은 그래들을 이용한 자바 프로젝트 구성에 대해 다루어볼 것이다. 그래들로 자바 프로젝트를 초기화 하는 방법은 이전 포스팅에 있으니 참고 바란다.

 

Gradle - Gradle의 기본

 

자바 타입으로 그래들 프로젝트를 생성하면 아래와 같은 기본 디렉토리 구조를 가진다.

 

src

    -main

       -java

    -test

       -java

 

그래들의 자바 플러그인의 Task 의존 관계는 아래 그림과 같다.

 

 

build를 실행하게 되면 compileJava와 test Task가 실행된다. 그런데 이전 단계 Task가 실패하면 다음 단계는 진행되지 않는다. 

 

-컴파일시 인코딩 오류가 날 경우

>gradle compileJava 

 

위와 같은 명령으로 컴파일 할때 인코딩 문제가 있다면 아래와 같이 옵션 값을 넣어준다.(build.gradle)

 

compileJava.options.encoding='UTF-8'

 

혹은 gradle.properties 파일에서 그래들의 jvmargs 환경변수로 값을 추가할 수도 있다.

 

org.gradle.jvmargs=-Dfile.encoding=UTF-8

 

 

-컴파일 단게에서 테스트 클래스들을 제외하는 방법

sourceSets{
    main{
        java{
            srcDirs = ['src','extraSrc']
            exclude 'test/*'
        }
    }
}

 

컴파일 태스크가 완료되면 build 디렉토리에 컴파일된 클래스 파일들이 생겨난다. 그런데, 이전에 생성된 파일과 중복되지 않도록 파일을 삭제한 후에 컴파일해야 하는 경우가 있다. 이럴 때는 Clean Task를 사용한다. 해당 태스크를 이용하면 빌드한 결과물이 생성되는 build 디렉토리 내용 전체가 삭제된다. 또한, clean Task는 다른 Task와 조합해서 사용할 수 있다.

 

>gradle clean

 

위 명령을 실행하면 build 디렉토리가 삭제되는 것을 볼 수 있다.

 

-의존성 관리하기

자바는 JVM을 통해 운영체제에 독립적으로 동작하고, 라이브러리를 만들때에도 운영체제별로 만들지 않고 자바 런타임에 호환되도록 만들면 되므로 타 언어에 비해서 오픈소스나 라이브러리들이 많은 편이다. 그래들은 이러한 라이브러리들을 편리하게 관리할 수 있도록 지원한다.

 

1)자바 프로젝트의 라이브러리 스코프

개발을 진행할 때 대표적으로 세 가지의 작업(컴파일, 테스트, 실행)을 한다. 각 작업에서 사용되는 라이브러리가 매우 다양하다. 그래들에서는 사용하는 라이브러리가 중복되지 않도록 스코프를 지원한다. 자바 프로젝트에서 지원하는 스코프는 dependencies 명령으로 확인할 수 있다.

 

>gradle dependencies

 

스코프별로 포함된 라이브러리가 출력되는데, 주로 사용하는 스코프는 compile, testCompile, runtime이다.

 

스코프 Task 설명
compile compileJava 컴파일 시 포함해야 할 때
runtime - 실행시점에 포함해야 할 때
testCompile compileTestJava 테스트를 위한 컴파일 시 포함해야 할때
testRuntime test 테스트를 실행시킬 때

 

2)라이브러리 추가

dependencies {
    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'
 
    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:28.0-jre'
 
    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'
 
    compile 'com.itextpdf:itextpdf:5.5.5'
}

 

마지막에 compile scope로 라이브러리를 하나 추가하였다. 그리고 아래 Task를 실행하면 compile scope에 라이브러리가 추가된 것을 볼 수 있다.

 

>gradle dependencies

 

이제 컴파일 태스크를 실행하면 위의 의존 라이브러리를 내려받을 것이다.

 

3)패키징하기

Java 플러그인을 사용한 상태에서 build 명령을 사용하면 기본으로 JAR 형태로 팩킹된다. 그래들에서 JAR파일은 libs 디렉토리에 생성되며 기본값으로 설정되어 있다. JAR 파일은 두가지 형태가 있다.

 

  1. 실행하기 위한 형태로 배포하는 JAR
  2. 라이브러리로 사용하는 JAR

만약 라이브러리 용도로 사용하는 JAR라면 별도 설정할 것이 없지만, 이러한 JAR를 실행시키면 아래와 같은 예외 메시지가 나타날것이다.

 

"*.jar에 기본 Manifest 속성이 없습니다."

 

JAR를 gradle task로 실행시키기 위해서는 아래 설정을 build.gradle에 추가하고 run task를 수행하면 된다.

 

apply plugin: 'application'
mainClassName="package.classname"

 

>gradle run

 

gradle run 태스크를 수행하면 jar파일이 실행된다.

 

Maven 프로젝트를 Gradle 프로젝트로 변환

 

>gradle init --type pom



출처: https://coding-start.tistory.com/304?category=820992 [코딩스타트]