Созданные JAXB классы не видят своих собственных зависимостей в IntelliJ IDEA

У меня есть проект maven, который автоматически генерирует некоторые классы, используя плагин JAXB в POM. Все в проекте работает нормально, проект собирается правильно и запускается без каких-либо проблем, однако IntelliJ не видит, что один из сгенерированных классов зависит от другого, поэтому постоянно сообщает мне, что в проекте есть проблемы.

Я могу решить эти предполагаемые проблемы, импортировав один из сгенерированных классов в другой, однако это противоречит смыслу автоматически сгенерированного класса!

Плагин JAXB в POM настроен следующим образом:

        <plugin>
            <groupId>org.jvnet.jaxb</groupId>
            <artifactId>jaxb-maven-plugin</artifactId>
            <version>4.0.6</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <schemaDirectory>src/main/resources/XSD</schemaDirectory>
                <schemaIncludes>
                    <include>*.xsd</include>
                </schemaIncludes>
            </configuration>
        </plugin>

Вызываемый XSD выглядит следующим образом:

<?xml version = "1.0" encoding = "UTF-8" ?>
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">

    <!-- Definition of the root element -->
    <xs:element name = "Person">
        <xs:complexType>
            <xs:sequence>
                <!-- First Name field -->
<!--                <xs:element name = "FirstName" type = "xs:string" />-->
                <xs:element name = "FirstName" type = "NameType" />
                <!-- Middle Name field -->
                <xs:element name = "MiddleName" type = "xs:string" />
<!--                <xs:element name = "MiddleName" type = "NameType" />-->

                <!-- Surname field -->
<!--                <xs:element name = "Surname" type = "xs:string" />-->
                <xs:element name = "Surname" type = "NameType" />

                <!-- Postcode field -->
<!--                <xs:element name = "Postcode" type = "xs:string" />-->
                <xs:element name = "Postcode" type = "NameType" />

                <!-- Date of Birth field -->
                <xs:element name = "DateOfBirth" type = "DateType" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- Custom complex type for Name with value attribute -->
    <xs:complexType name = "NameType">
        <xs:attribute name = "value" type = "xs:string" use = "required" />
    </xs:complexType>

    <!-- Custom simple type for Date of Birth with format validation -->
    <xs:simpleType name = "DateType">
        <xs:restriction base = "xs:string">
            <xs:pattern value = "\d{4}\d{2}\d{2}" /> <!-- Pattern for 'yyyyMMdd' -->
        </xs:restriction>
    </xs:simpleType>

</xs:schema>

На основе этого JAXB создал три автоматически сгенерированных класса: NameType, Person и ObjectFactory. Путь ко всем трем из них — target/generated-sources/xjc/generated.

сгенерированные источники помечены в IntelliJ как «Корень сгенерированных источников», и в настройках проекта я вижу, что target/generated-sources, target/generated-sources/annotations и target/generated-sources/xjc/generated были добавлены в качестве исходных папок.

Чтобы IntelliJ не думал, что есть проблемы, я должен добавить import generated.NameType; в класс Person и import generated.NameType; import generated.Person; в ObjectFactory.

Есть ли настройка, которую я изменяю в IntelliJ, чтобы она распознавала эти вещи по умолчанию. Опять же, я повторяю, мой код создается и работает абсолютно нормально — эта проблема просто вызывает проблемы с такими вещами, как Git, от автоматической отправки, поскольку он считает, что есть ошибки, и обычно раздражает, когда говорят, что есть проблемы, когда их нет. т любой.

В случае, если что-либо из следующего имеет значение:

Я использую IntelliJ IDEA 2024.1.4 (Ultimate Edition) на Intel Mac под управлением 13.5.1, и общие свойства POM следующие:

<properties>
        <compiler-plugin.version>3.12.1</compiler-plugin.version>
        <maven.compiler.release>21</maven.compiler.release>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
        <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
        <quarkus.platform.version>3.9.3</quarkus.platform.version>
        <skipITs>true</skipITs>
        <surefire-plugin.version>3.2.5</surefire-plugin.version>
    </properties>
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, ваша проблема в том, что вы добавили target/generated-sources/xjc/generated вместо target/generated-sources/xjc в качестве исходной папки в IntelliJ.

Для тестовых проектов в jaxb-tools структура проекта практически всегда следующая:

При этом вы можете видеть, что target/generated-sources/xjc помечен как «сгенерированный» в исходных папках.

В этой папке у меня есть один пакет с именем generated, поскольку в моем импортированном XSD не определено пространство имен (вам кажется, то же самое).

Просто исправьте свою конфигурацию, чтобы получить базовый каталог (как указано в свойстве плагина generateDirectory, которое по умолчанию равно ${project.build.directory}/generated-sources/xjc).

Вы также можете переопределить свойство плагина generatePackage, чтобы ваш класс генерировался в другом пакете (например, com.foo.baz.bar) вместо базового пакета generated, который здесь используется по умолчанию.

В этом и была проблема: IntelliJ теперь правильно обращается ко всему. Чтобы добавить в будущем людей с такой же проблемой, вы можете перейти к этим настройкам исходной папки, перейдя в [Файл] [Структура проекта...], а затем выбрав [Модули] в разделе «Настройки проекта» во всплывающем окне.

paul frith 01.07.2024 23:17

Так должно быть по умолчанию (target/generate-sources/xjc), но да, вы можете перейти к этим настройкам, используя свой метод.

Laurent Schoelens 01.07.2024 23:23

Я думаю, что в моем случае это было не так, поскольку я изначально создал проект в коде Visual Studio, а затем перенес его в IntelliJ, поскольку он казался более функциональным для Java - поэтому я подозреваю, что у меня не было бы проблемы, если бы я построил его с нуля, используя IntelliJ.

paul frith 02.07.2024 00:04

Другие вопросы по теме