MAKE IT SIMPLE

[Gradle] Jaxb2 Collection Setter 라이브러리 사용하기 (JAVA 11) 본문

Gradle

[Gradle] Jaxb2 Collection Setter 라이브러리 사용하기 (JAVA 11)

punchlips 2021. 4. 28. 12:47

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가 생성되었다ㅎㅎ

Comments