삶 가운데 남긴 기록 AACII.TISTORY.COM
build.gradle 의 기본 본문
gradle 8.5와 인텔리제이를 기준으로 합니다.
Task
gradle은 기본적으로 task를 작성하고 실행합니다.
task는 실행할 처리들로 이루어진 명령어들을 작성해둔 것입니다.
이렇게 정의한 task는 gradle 명령어로 실행할 수 있습니다.
tasks.register('enjoy') {
doLast {
println("================================================");
println("enjoy gradle build system.");
println("================================================");
}
}
build.gradle 파일의 끝에 위 task내용을 등록합시다.
그리고 나서 인텔리제이 터미널이나 cmd로 해당 gradle 프로젝트 경로에서 아래와 같이 gradle을 실행해보십시오.
gradle enjoy
그러면 등록했던 task의 메시지가 출력되는것을 확인할 수 있습니다.
doLast{ }는 task의 액션 리스트 마지막에 처리를 추가하는 것입니다.
doFirst{ }를 task의 맨 아래에 적어도 처음에 실행되기 때문에 doFirst{ }도 task의 최초 실행할 액션 처리를 추가하는 용도로 사용합니다.
Task에 매개 변수 전달하기
task를 실행할 때 어떤 정보를 task에 전달하려면 매개 변수를 통해서 전달 할 수 있습니다.
위의 task를 아래 처럼 수정해 보십시오.
tasks.register('enjoy') {
doLast {
def sum = 0;
for(def i in 1..num.toInteger()){
sum += i;
}
println("SUM: "+sum);
}
}
이후 gradle을 실행할 때 아래와 같이 실행해 보십시오.
gradle enjoy -q -Pnum=100
이 때, -q 옵션은 quiet 모드로 쓸데없는 정보들을 출력하지 않게 해주는 옵션입니다.
-P프로퍼티=프로퍼티값 형태로 매개 변수 값을 전달 할 수 있습니다.
실행하면 아래 처럼 나옵니다.
SUM: 5050
동적 task 생성
개발 환경이나 제품 배포 환경을 나누어서 빌드할 수 있도록 동적으로 task를 생성할 수 있습니다.
// 1. 동적으로 생성할 기준이 되는 목록 정의
def environments = ['dev', 'staging', 'prod']
// 2. 목록을 순회하며 'tasks.register'로 태스크 등록
environments.each { env ->
// 동적 태스크 이름 생성 (예: Dev, Staging)
def taskName = "${env.capitalize()}"
tasks.register(taskName) {
group = 'Env' // 태스크 그룹 지정 (gradle tasks --group=Env 명령으로 보기 편함)
description = "Prints a greeting for the ${env} environment."
// 'doLast' 액션으로 실제 작업 정의
doLast {
println "========================="
if (env == 'prod') {
println "Hello, PRODUCTION environment!"
} else {
println "Hello, ${env} environment!"
}
println "========================="
}
}
}
개발환경으로 빌드할 때 아래 명령어로 실행해봅니다.
gradle dev
제품배포 환경으로 빌드 할 때 아래 명령어로 실행해 봅시다.
gradle prod
JAVA 플러그인의 task
자바로 개발할 때의 기본적인 기능은 java 플러그인에 포함되어 있습니다.
build.gradle에서 로드해서 이용합니다.
plugins {
id 'java'
}
혹은
apply plugin: 'java'
이제 기본적인 java플러그인의 task들을 알아봅시다.
java
자바 소스 코드를 컴파일하고 그 외 필요한 리소스들을 모아서 jar 파일을 생성합니다.
프로그램을 배포할 때 이 태스크로 jar 파일을 만들면 유용합니다.
단, 이 java 태스크로 생성되는 jar 파일은 Executable이 아닙니다.
compileJava
자바 소스 코드를 모두 컴파일합니다.
processResources
리소스 파일을 클래스 폴더 안에 복사합니다.
classes
소스 코드 컴파일과 리소스 파일 복사를 실행합니다.
test
프로그램 테스트를 실행합니다.
jar
프로그램을 컴파일하고 리소스를 준비한 뒤 jar 파일로 패키징합니다. 이 jar 파일 또한 Executable jar가 아닙니다.
clean
빌드로 생성된 파일을 모두 삭제합니다.
이 task들은 gradle 태스크이름 형태로 실행할 수 있습니다.
클래스 실행
src\main\java\패키지경로 밑에 실행할 수 있는 main 메소드가 있는 .java 파일을 생성 후 편집합니다.(인텔리제이에서 자동 샘플 생성을 체크했다면 Main.java 파일이 생성되어 있습니다.)
이 Main.java 파일을 작성해줍니다.
//패키지명 생략
public class Main {
private String name;
public static void main(String[] args) {
System.out.println("Hello, World!");
}
public boolean showMessage(String name){
this.name = name;
System.out.println("Who are you? \n"+this.name);
return true;
};
public String getMessage(String name) {
this.name = name;
return this.name;
}
}
java 플러그인에는 빌드는 할 수 있지만 실행하는 task가 없었습니다. application 플러그인을 사용해서 앱을 실행하게 됩니다.
plugins {
// 'application' 플러그인을 적용합니다.
// 'java' 플러그인은 'application'에 의해 자동으로 포함됩니다.
// id 'java'
id 'application'
}
// 메인 클래스 지정
application {
// 예를들어 'com.example.Main' 를 실행할 클래스로 지정
mainClass = 'com.example.Main'
}
이처럼 buid.gradle을 수정한 후 run 태스크를 실행합니다.
gradle run
application 플러그인에는 run task가 포함되어 있습니다.
실행하는 동안 클래스가 컴파일되며 MyMain클래스를 실행해줍니다.
실행가능한 jar 만들기
위에서 작업한 Main.java 클래스를 실행하능한 jar 으로 패키징하려면 다음과 같이 build.gradle에 추가해줍니다.
// 실행 가능한 Fat JAR (Uber JAR)를 만들기 위한 설정
jar {
// application 플러그인에서 설정한 mainClass(Main.java)를 MANIFEST.MF 파일에 추가합니다.
manifest {
attributes 'Main-Class': application.mainClass
}
// 모든 의존성(라이브러리)을 JAR 파일 내에 포함시킵니다.
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
// 의존성 포함 시 중복 파일이 발생할 경우 처리 전략 (선택 사항이지만 권장)
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
그리고 나서 인텔리제이의 gradle 탭에서 task > build를 실행하거나
터미널에서 ./gradlew build 를 실행합니다.
그러면 build/libs 경로에 jar 파일이 생성되어있습니다.
예를들어 이렇게 생성된 jar 파일이 demo-1.0-SNAPSHOT.jar 라고 가정하면
java -jar .\build\libs\demo-1.0-SNAPSHOT.jar
처럼 jar 파일을 실행할 수 있습니다.
유닛 테스트
java 플러그인에는 JUnit으로 유닛 테스트를 할 수 있는 태스크가 포함되어 있습니다.
실행을 위한 Main.java 클래스는 위에서 작성했던 Main.java의 내용을 그대로 쓰겠습니다.
유닛 테스트를 위한 테스트 클래스(.java)는 다음과 같습니다.
import demo.exeample.Main; //Main.java의 패키지 경로
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class AppTest {
@Test
public void testApp(){
String name = "I am tester.";
Main app = new Main();
assertNotNull(app);
assertTrue(app.showMessage(name));
try{
assertTrue(app.getMessage(name).contains(name)); //아래꺼랑 바꿔가면서 테스트
//assertTrue(app.getMessage(name).contains("operator"));
}catch(Exception e){
e.printStackTrace();
}
}
}
build.gradle 에 테스트 관련 설정을 해줍니다.
repositories {
//jcenter()
mavenCentral()
}
dependencies {
testImplementation platform('org.junit:junit-bom:5.10.0')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
test {
useJUnitPlatform()
}
이제 명령행에서 gradle test를 실행하시거나 인텔리제이에서 gradle 탭을 이용 test 태스크를 실행하십시오.
테스트에 대한 보고서가 build/reports/ 경로에 생성됩니다.
html 문서로 되어있으니 브라우저에서 확인 가능합니다.
'DEV&OPS > Java' 카테고리의 다른 글
| gradle and groovy (1) | 2025.10.30 |
|---|---|
| JAVA Thread (1) | 2025.03.27 |
| ORA-01704: JAVA ORACLE JDBC로 4000자 이상 CLOB 데이터 INSERT, UPDATE 예제 (2) | 2024.12.30 |
| org.apache.poi 자바용 오피스 라이브러리 임시 파일 제거 (3) | 2024.11.27 |
| [SWT/JFace] FileDialog 파일 열기 대화 상자 (1) | 2024.11.27 |
