tasks.withType(JavaCompile){ options.compileArgs << '-parameters' }는 Gradle 빌드 스크립트에서 사용되는 코드로, 자바 컴파일 작업에 대해 특정 컴파일 옵션을 설정하는 데 사용된다. 이 코드의 목적과 동작 방식을 설명하면 다음과 같다.
Java 8부터 제공되는 -parameters 컴파일 옵션은 리플렉션(reflection https://jeongkyun-it.tistory.com/225) API를 사용하여 메서드나 생성자의 매개변수 이름을 런타임에 참조할 수 있도록 한다. 기본적으로, 자바 컴파일러는 메서드 매개변수 이름을 클래스 파일에 포함하지 않기 때문에 리플렉션을 사용할 때 매개변수 이름을 알 수 없다. 하지만 -parameters 옵션을 사용하면 매개변수 이름을 클래스 파일에 포함시킬 수 있다.
Gradle 설정 코드 설명 : tasks.withType(JavaCompile)는 Gradle 빌드 스크립트에서 JavaCompile 타입의 모든 작업(task)을 대상으로 설정을 적용하기 위한 방법이다. JavaCompile 작업은 자바 소스 파일을 컴파일하는 역할을 한다.
tasks.withType(JavaCompile) {
options.compilerArgs << '-parameters'
}
위 코드는 다음과 같이 해석할 수 있다:
tasks.withType(JavaCompile): 빌드 스크립트 내에서 모든 JavaCompile 타입의 작업을 선택한다.
중괄호 {}: 선택된 JavaCompile 작업에 대해 특정 설정을 적용할 수 있는 블록을 시작한다.
options.compilerArgs: JavaCompile 작업의 컴파일 옵션을 설정하는 부분이다. compilerArgs는 자바 컴파일러에 전달할 추가 인수(arguments)를 나타낸다.
<< '-parameters': compileArgs 목록에 -parameters 옵션을 추가한다. 이는 자바 컴파일러에게 매개변수 이름을 클래스 파일에 포함시키라는 지시를 내린다.
결과 : 이 설정을 통해, 자바 소스 파일이 컴파일될 때 메서드와 생성자의 매개변수 이름이 클래스 파일에 포함된다. 이렇게 하면 리플렉션 API를 사용할 때 매개변수 이름을 쉽게 참조할 수 있다.
예시
tasks.withType(JavaCompile) {
options.compilerArgs << '-parameters'
}
위 코드를 포함한 build.gradle 파일을 사용하여 프로젝트를 빌드하면, 모든 자바 컴파일 작업에 대해 매개변수 이름이 클래스 파일에 포함된다. 이를 통해 리플렉션을 사용하여 매개변수 이름을 다음과 같이 가져올 수 있다:
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
public class Example {
public void greet(String name) {
System.out.println("Hello, " + name);
}
public static void main(String[] args) throws Exception {
Method method = Example.class.getMethod("greet", String.class);
for (Parameter parameter : method.getParameters()) {
System.out.println("Parameter: " + parameter.getName());
}
}
}
이 예제에서, greet 메서드의 매개변수 이름(name)을 출력할 수 있게 된다. -parameters 옵션이 없다면 매개변수 이름은 arg0과 같은 형식으로 표시된다.