이전 글#의 후속 내용이다.
제목에서는 더 뒤에 나오지만, 실제 구현했던 순서가 더 빨라 먼저 설명한다.
delombok된 코드를 보면 Stream chain에 줄 나눠놓은 것들이 다 합쳐져 있든지 해서 읽기 어려운 경우가 있기에 일괄적으로 formatting을 해주고자 하였다. 역시 bytecode, sources variant에도 (delombok 후) googleJavaFormat 전체 적용이 필요하다.
Delombok때 사용했던 것과 동일한 부분은 최대한 생략하고, 추가해야 하는 곳을 살펴보면 다음과 같다. 오직 delombokTask의 뒤에 무조건 실행되도록 붙여서 모든 것을 얻어간다.
// import 생략
plugins {
id 'java'
id 'io.freefair.lombok' version '6.6'
id 'com.github.sherter.google-java-format' version '0.9'
}
java {
// 생략
}
compileJava {
// 생략
}
delombok.finalizedBy tasks.named('googleJavaFormat')
googleJavaFormat {
source = sourceSets.main.delombokTask
options style: 'AOSP'
}
두 가지 주의해야 한다.
1년 10개월 만의 Major 버전업이고, 내 기여#1 #2가 들어간 버전이다.
sources variant의 구현부를 다시 한번 보자. Signature가 변경되었을 거라고 생각을 못 해서 꽤 헤맸다.
public void withSourcesJar() {
TaskContainer tasks = project.getTasks();
ConfigurationContainer configurations = project.getConfigurations();
SourceSet main = getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME);
configureDocumentationVariantWithArtifact(SOURCES_ELEMENTS_CONFIGURATION_NAME, null, SOURCES, ImmutableList.of(), main.getSourcesJarTaskName(), main.getAllSource(), findJavaComponent(components), configurations, tasks, objectFactory, project.getFileResolver(), project.getTaskDependencyFactory());
}
고려한 내용들은 다음과 같다.
project.fileResolver
는 ProjectInternal
의 메소드인데 build.gradle에서의 타입과 달라 Syntax Highlighting이 제대로 되지 않고 인수 타입도 추론할 수 없다고 나왔던 것을 ProjectInernal
로 캐스팅하여 해결@see
를 Groovydoc 형태로 바꾸어 IDE가 인식할 수 있도록 함import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.plugins.internal.JvmPluginsHelper
plugins {
id 'java'
id 'io.freefair.lombok' version '6.6.2'
}
/**
* @see org.gradle.api.plugins.internal.DefaultJavaPluginExtension#withSourcesJar
*/
java {
def tasks = project.tasks
def configurations = project.configurations
def main = sourceSets.main
JvmPluginsHelper.configureDocumentationVariantWithArtifact(
JavaPlugin.SOURCES_ELEMENTS_CONFIGURATION_NAME,
null,
DocsType.SOURCES,
[],
main.sourcesJarTaskName,
main.delombokTask,
JvmPluginsHelper.findJavaComponent(components),
configurations,
tasks,
project.objects,
((ProjectInternal) project).fileResolver,
((ProjectInternal) project).taskDependencyFactory)
}
compileJava {
// 생략
}
추가로 Java toolchains를 사용하고 있었다면 settings.gradle에 다음과 같은 내용을 첫 부분에 추가해야 한다.
plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.4.0'
}
적용 다 해두고 글 작성하면서 palantir-java-format을 추가로 발견했다. google-java-format의 장풍을 해결해 주기에 적용하고 싶은데, Gradle Plugin이 spotless와의 통합만 염두에 두고 있는 것으로 보여 규모가 커질 것 같다.
한편 최근 인도네시아 등 여행을 계획하며 Lombok이 Jakarta 섬 주변에 있는 다른 섬 이름임을 이제야 알았다. 관광 요소가 무엇이 있을지는 잘 모르겠지만 한 번 들러는 보고 싶다.
후속 글#을 작성했다.