-
[Gradle] Gradle 과 JVM 관계 알아보기 ( 간단한 Task 생성하기 )Java/Gradle 2024. 2. 17. 17:49반응형
- 목차
들어가며.
이번 글에서는 Gradle 의 동작 방식을 알아보기 위해서 build.gradle 내부에 간단한 Task 를 생성 후 실행해보도록 합니다.
Gradle 과 JVM 관계.
먼저 Gradle 이 JVM 위에서 어떤 식으로 동작하는지 알아보기 위해서 Gradle Docker Container 를 실행합니다.
docker run -it --rm --name gradle gradle bash
그리고 이 Gradle Docker Container 내부에서 간단한 Task 를 생성 후 실행합니다.
아래의 간단한 예시는 build.gradle 파일을 생성하며, 이 파일은 300초 동안 실행되도록 작성하였습니다.
cat <<'EOF'> ./build.gradle task delayedTask { println "Task 시작" Thread.sleep(300000) println "300초 후 Task 완료" } EOF gradle delayedTask
그 후에 ps aux, ps -ef 등의 명령을 통해서 어떤 프로세스들이 실행 중인지 확인하였습니다.
요약된 내용이긴한데, 아래와 같이 2개의 JVM Process 들이 실행됩니다.
- org.gradle.launcher.GradleMain
- org.gradle.launcher.daemon.bootstrap.GradleDaemon
/opt/java/openjdk/bin/java -Xmx64m -Xms64m -javaagent:/opt/gradle/lib/agents/gradle-instrumentation-agent-8.12.jar -Dorg.gradle.appname=gradle -classpath /opt/gradle/lib/gradle-gradle-cli-main-8.12.jar org.gradle.launcher.GradleMain delayedTask /opt/java/openjdk/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED -XX:MaxMetaspaceSize=384m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -cp /opt/gradle/lib/gradle-daemon-main-8.12.jar -javaagent:/opt/gradle/lib/agents/gradle-instrumentation-agent-8.12.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.12
첫번째로 실행되는 GradleMain 클래스는 build.gradle 의 DSL File 을 런타임에서 파싱 및 분석하여 Task 를 실행하는 프로세스입니다.
그리고 두번째로 실행되는 GradmeDaemon 클래스는 빌드 과정의 최적화를 위해서 실행되는 데몬 프로세스라고 하네요.
아무튼 중요한건 GradleMain 클래스가 Groovy DSL 언어로 작성된 build.gradle 의 해석 및 실행하는 JVM Process 라는 사실입니다.
Task 알아보기.
build.gradle 파일은 task 라는 단위로 실행됩니다.
아래와 같이 간단한 task 를 생성할 수 있고, 이 내부에는 Groovy 문법의 코드가 작성될 수 있습니다.
task delayedTask { println "Task 시작" Thread.sleep(3000) println "3초 후 Task 완료" }
반응형'Java > Gradle' 카테고리의 다른 글
[Gradle] Java Plugin 알아보기 (0) 2024.03.06