Gradle XJC генерирует методы равенства и хэш-кода

#java #gradle #jaxb #xjc

Вопрос:

В проекте есть модуль gradle для создания классов JAX2B. В конфигурации XJC уже используются примечания:

     bindingFiles = project.files("$projectDir/src/main/resources/binding.xjb",
      "$projectDir/src/main/resources/annotations.xjb")
    // Needed to execute custom annotations
    options.add("-Xannotate")
}
 

Я подумал, что мог бы добавить варианты, чтобы получить equals() и hashCode()

 xjc {
    bindingFiles = project.files("$projectDir/src/main/resources/binding.xjb",
      "$projectDir/src/main/resources/annotations.xjb")
    options.addAll("-Xannotate", "-Xequals", "-XhashCode")
}
 

Методов нет в классе, и в журнале сборки нет ошибок или предупреждений.
Как мне создать эти методы?

PS: Вот зависимости файлов сборки

 dependencies {
    implementation(project(":xxx:xxx-api"))
    implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.11.2")
    xjcPlugins("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.11.2")
    xjcPlugins("org.jvnet.jaxb2_commons:jaxb2-basics-annotate:1.1.0")
}
 

обновленный

Спасибо @thokuest за обнаружение отсутствующей зависимости.

В проекте есть модуль gradle для создания классов JAX2B, но я получаю ошибки при сборке, добавляя опцию «-Xequals».:

 build/generated/sources/xjc/java/org/pen/ProductOutputType.java:16: error: package org.jvnet.jaxb2_commons.locator.util does not exist
import org.jvnet.jaxb2_commons.locator.util.LocatorUtils;
                                           ^
build/generated/sources/xjc/java/org/pen/ProductOutputType.java:47: error: cannot find symbol
public class ProductOutputType implements Equals2
                                         ^
 

Я создал минимальный пример в качестве сути-build.gradle.kts

Ответ №1:

equals() и hashCode() поддерживаются плагином jaxb2-основы.

 xjcPlugins 'org.jvnet.jaxb2_commons:jaxb2-basics:1.11.1'
 

Согласно вики org.jvnet.jaxb2_commons:jaxb2-basics-runtime:1.11.1 -странице проекта, вам также необходимо добавить зависимость от времени выполнения.

Обновить

Зависимость org.jvnet.jaxb2_commons:jaxb2-basics-runtime:1.11.1 должна находиться в области implementation видимости, так как в противном случае возникает ошибка сборки, описанная в вопросе.

Комментарии:

1. Спасибо. Я скучал по этому. Я добавил это и продвинулся немного дальше. Я уточню вопрос.

2. @ahoffer обновлен ответ. Вам нужно добавить org.jvnet.jaxb2_commons:jaxb2-basics-runtime:1.11.1 в область implementation действия .