Caused by: java.lang.StackOverflowError
at lombok.core.AST.fieldsOf(AST.java:234)
at lombok.javac.JavacAST.drill(JavacAST.java:506)
at lombok.javac.JavacAST.buildStatementOrExpression(JavacAST.java:476)
at lombok.javac.JavacAST.buildTree(JavacAST.java:285)
at lombok.javac.JavacAST.buildTree(JavacAST.java:1)
at lombok.core.AST.buildWithField0(AST.java:394)
at lombok.core.AST.buildWithField(AST.java:292)
docker로 배포해보고자 jar 파일이 필요한 상황이었습니다.
그런데 graldew build
를 통해서 jar을 생성하려고 시도할 때마다 위와 같은 에러 상황이 발생하는 것이다.
IDE 인 intelliJ에서는 Setting에서
Setting > Compiler > VM options
를 Xss4m
로 설정 (관련 디버깅 글)해줌으로써 스택의 사이즈를 늘려주니 IDE 상에서 BUILD 및 RUN은 수행이 됩니다.
Xss4m
로도 안되면 더 큰 스택 사이즈로 옵션을 지정해주면 됩니다.JVM Option
에 스택 사이즈 설정 옵션을 더해주면 될 것이라는 추측이 들었습니다. gradlew
org.gradle.jvmargs=-Xss5m
을 넣었으나 적용되지 않았습니다. build.gradle
build.gradle
gradlew.properties
gradlew.properties
에 아래와 같이 jvmargs 로 jvm의 argument에 스택 사이즈 증가 속성을 더해주고 graldew build
를 수행하니 성공적으로 build 됐습니다. org.gradle.jvmargs=-Xss5m
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true
이때 인텔리제이를 ide 로 사용하고 있다면 빌드 옵션을 아래와 같이 설정해줘야 합니다.
이후 컴파일 옵션에서 스택 사이즈를 늘려주면 됩니다.
=> Specifies the JVM arguments used for the daemon process.The setting is particularly useful for tweaking memory settings.
에러메시지를 보면서 감이 안잡혔던 부분은 바로 lombok에서 아래와 같은 buildTree
부분이었습니다.
AST 내용 / 사진 출처 : https://www.happykoo.net/@happykoo/posts/256
한번도 롬복의 구현 과정을 알아본 적이 없었기에, 롬복이 트리 구조를 사용하나!? 라는 호기심에 알아보았습니다.
AST 는 Abstract Syntax Tree라고 합니다.
프로그래밍 언어로 작성된 소스 코드를 분석하여 추상적인 노드 형태의 트리로 구성한 것이라고 합니다.
프로그래밍 언어 소스는 컴파일러(자바- javac)에 의해 컴파일 과정에서 AST를 구성하게 된다고 합니다.
@Setter
https://github.com/projectlombok/lombok/issues/1118
https://github.com/projectlombok/lombok/issues/2453
https://www.happykoo.net/@happykoo/posts/256
출처 : https://www.happykoo.net/@happykoo/posts/256
AST(Abstract Syntax Tree) 란, 프로그래밍 언어로 작성된 소스 코드를 분석하여 추상적인 노드 형태의 트리로 구성한 것을 말합니다.
자바 뿐만 아니라 대부분의 프로그래밍 언어로 작성된 소스(개발자에 의해 작성된 소스)는 컴파일러(자바에서는 javac)에 의해 컴파일 과정에서 AST를 구성하게 됩니다.
AST 는 프로그램 코드(소스)의 구조를 표현하는 프로퍼티이며, 컴파일러의 구문 분석 결과물이라고 할 수 있습니다.
다만, 모든 세세한 정보를 나타내지는 않기에 (세미콜론, 괄호, 구두점, 주석 생략) AST 로부터 원래 소스로 완벽하게 복구하는 것은 거의 불가능합니다.
오타가 있어서 정정합니다.
gradle.properties에 "org.gradle.jvmargs=-Xss25m" 이 내용을 넣는 것이 내용적으로 맞지만,
gradlew.properties 이 아니고 gradle.properties 입니다.
그리고 gradle.properties 파일은 기본으로 존재하는 파일이 아니니 project 폴더에 최상위에 만들어주시면 됩니다.
그리고 나서 gradle wrapper 를 해주시면 gradlew 로 build가 잘됩니다.
저의 경우는 윈도우여서 아래 명령어로 build 했습니다. compileTestJava 는 에러가 나더라구요 test 코드에 에러가있나봐용~~ ㅎ
./gradlew.bat clean build -x compileTestJava --stacktrace
좋은 지식 감사합니다.