MAKE IT SIMPLE
[Gradle] Jaxb2 Collection Setter 라이브러리 사용하기 (JAVA 11) 본문
2021.02.15 - [Gradle] - [Gradle] Java 11 에서 jaxb 라이브러리 사용하기
[Gradle] Java 11 에서 jaxb 라이브러리 사용하기
2021/01/28 - [Gradle] - [Gradle] XSD, WSDL 파일로 JAXB 클래스 생성하기 [Gradle] XSD, WSDL 파일로 JAXB 클래스 생성하기 Spring Boot 프로젝트에서 gradle build script를 사용하여 스키마 정의 파일을 변환..
vincode.tistory.com
저번에는 java8 -> java11로 버전업을 했을때의 jaxb 라이브러리에 대해서 다뤄보았다.
프로젝트에 앞서 먼저 스키마 클래스들을 컴파일 하고 작업하는 와중에, List, Map, Set 같은 Collection 계열의 속성들은 Setter 가 생성되지 않는 문제점을 발견했다.
구글링 해보니 jaxb 플러그인이 Collection 계열을 지원하지 않아서 그렇다고 한다.
Collection의 Setter를 생성해주는 jaxb2 플러그인 및 디펜던시가 있다고 했는데 플러그인 종류가 많아서 되는 방법을 찾으려고 또 하루종일 열심히 삽질을 했다..^^
나의 경우 이렇게 했더니 List와 같은 Collection 들의 Setter 드디어 생성되었다.
1) build.gradle에 plugin 추가
plugins {
id "com.github.jacobono.jaxb" version "1.3.5"
id "com.github.gradlecommunity.jaxb2" version "3.1.0"
}
.
.
.
apply plugin: 'com.github.jacobono.jaxb'
apply plugin: 'com.github.gradlecommunity.jaxb2'
2) org.jvnet.jaxb2_commons 디펜던시 추가 (이때 반드시 jaxb2 임을 확인)
dependencies {
jaxb group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
jaxb group: 'com.sun.xml.bind' , name: 'jaxb-core' , version: '2.3.0.1'
jaxb group: 'com.sun.xml.bind' , name: 'jaxb-xjc' , version: '2.3.1'
jaxb group: 'com.sun.xml.bind' , name: 'jaxb-impl' , version: '2.3.1'
jaxb group: 'javax.annotation', name:'javax.annotation-api', version:'1.3.2'
jaxb group:'org.jvnet.jaxb2_commons', name: 'jaxb2-basics-ant', version:'0.12.0'
jaxb group:'org.jvnet.jaxb2_commons', name: 'jaxb2-basics', version:'0.12.0'
jaxb group:'org.jvnet.jaxb2_commons', name: 'jaxb2-basics-annotate', version:'1.1.0'
jaxb group:'org.jvnet.jaxb2_commons', name: 'jaxb2-value-constructor', version:'3.0'
jaxb group: 'javax.activation', name: 'activation', version: '1.1.1'
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.3'
implementation 'org.glassfish.jaxb:jaxb-runtime:2.3.3'
}
3) ant.taskdef 에서 classname 수정
com.sun.tools.xjc.XJCTask-> org.jvnet.jaxb2_commons.xjc.XJC2Task
ant.taskdef(
name: 'xjc',
//classname: 'com.sun.tools.xjc.XJCTask',
classname: 'org.jvnet.jaxb2_commons.xjc.XJC2Task',
classpath: configurations.jaxb.asPath
)
4) xjc에 -Xsetters -Xsetters-mode=direct 추가(+extension: true)
ant.xjc(
destdir: "${jaxbTargetDir}",
package:"com.demo.test",
schema: "src/main/resources/test.xsd",
encoding: 'UTF-8',
extension: 'true' //1
)
{
arg(line:'-Xsetters -Xsetters-mode=direct') //2
}
다시 빌드해보면~ 짜잔!
이제 List도 문제없이 Setter가 생성되었다ㅎㅎ
'Gradle' 카테고리의 다른 글
[Gradle] Java 11 에서 jaxb 라이브러리 사용하기 (0) | 2021.02.15 |
---|---|
[Gradle] XSD, WSDL 파일로 JAXB 클래스 생성하기 (0) | 2021.01.28 |