eclipse oxygen 에서 gradle jdk 10 facet 적용 하기.
gradle 나름 편하고 좋지만 버그도 많고 사용자가 직접 해줘야 할 것이 많습니다. 하루라도 빨리 자동화가 많이 되었으면 좋겠네요.
oxygen 에서 프로젝트 별로 compile 버전을 설정 할 때 jdk9 이상으로 gradle에서 지정 할 경우 1.9 1.10 으로 자동으로 지정 될 겁니다. 허나 eclipse 에서는 jdk8 이상 부터는 앞에 1. 이걸 빼고 9,10 이렇게 설정이 가능 하도록 되어 있습니다. gradle 4.8-rc-1 버전 까지도 제대로 작동 되지않는데요.... 해결 방법은 아래와 같습니다.
저는 subprojects task에 적용 했지만 위치는 편한곳에 하셔도 됩니다.
ext {
defaultCompileVersion = '10'
commonCompileVersion = '1.7'
projectBCompileVersion = '1.7'
projectCCompileVersion = '1.7'
}
subprojects {
apply plugin: 'eclipse-wtp'
// eclipse 설정 파일 변경
eclipse {
//프로젝트별 소스 컴파일 버전을 지정한다.
if(project.name == "project.a"){
sourceCompatibility = commonCompileVersion
targetCompatibility = commonCompileVersion
}else if(project.name == "project.b"){
sourceCompatibility = projectBCompileVersion
targetCompatibility = projectBCompileVersion
}else if(project.name == "project.c"){
sourceCompatibility = projectCCompileVersion
targetCompatibility = projectCCompileVersion
}else {
sourceCompatibility = defaultCompileVersion
targetCompatibility = defaultCompileVersion
}
wtp {
facet {
file{
whenMerged { wtpFacet ->
//facet 정보를 읽어와서 jst.java 항목을 찾는다.
//소수점 자리를 읽어와서 jdk8보다 크면 9,10 과같이 설정 하고
//그렇지 않으면 1.6,1.7,1.8과 같이 지정한다.
//ps. 나중에 이 버그가 수정 된다면 이 작업은 할 필요가 없을 것 같습니다.
def facet = wtpFacet.facets.findAll {it.name.startsWith("jst.java")}
def jdkVersion = sourceCompatibility.toString().substring(2).toInteger();
facet.each {
it.version = (jdkVersion > 8) ? jdkVersion : sourceCompatibility
}
}
}
}
}
...
...
...