Как мне сказать Maven не игнорировать атрибут пространства имен в импортированном XSD?

Я использую плагин mojohaus jaxb2-maven для создания источников Java из файлов схемы xsd. Мой pom.xml выглядит так:

...    
<plugin>

            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>2.5.0</version>
            <executions>
                <execution>
                    <id>xjc-1</id>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                    <configuration>
                        <packageName>my.first.package.types</packageName>
                        <sources>
                            <source>src/main/java/META-INF/wsdl/firstSchema.xsd</source>                                
                        </sources>                          
                    </configuration>
                </execution>
                <execution>
                    <id>xjc-2</id>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                    <configuration>
                        <packageName>my.second.package.types</packageName>
                        <sources>                                                       
                            <source>src/main/java/META-INF/wsdl/secondSchema.xsd</source>
                        </sources>
                        <clearOutputDir>false</clearOutputDir>              
                    </configuration>
                </execution>
            </executions>
            <configuration>
                <outputDirectory>src/main/javagen</outputDirectory>
            </configuration>
        </plugin>

Эта конфигурация плагина должна соответствовать конфигурации, найденной здесь. Когда я запускаю сборку, сгенерированные исходные файлы из первой схемы также помещаются во второй пакет. Может ли кто-нибудь объяснить мне, почему это так? Это баг или я что-то пропустил?

Большое спасибо за любой вклад!

Редактировать:

Я также попробовал плагин maven-jaxb2. Тот же результат! Так что это, кажется, общая проблема maven. Моя конфигурация плагина для maven-jaxb2-plugin выглядит следующим образом:

...
            <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.14.0</version>
            <executions>
                <execution>
                    <id>first</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <schemaIncludes>
                            <include>firstSchema.xsd</include>
                        </schemaIncludes>
                        <generatePackage>my.first.package.types</generatePackage>
                    </configuration>
                </execution>
                <execution>
                    <id>second</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>                         
                        <schemaIncludes>
                            <include>secondSchema.xsd</include>
                        </schemaIncludes>
                        <generatePackage>my.second.package.types</generatePackage>
                    </configuration>
                </execution>
            </executions>
            <configuration>
                <schemaDirectory>src/main/java/META-INF/wsdl</schemaDirectory>
                <generateDirectory>src/main/javagen</generateDirectory>
            </configuration>
        </plugin>

У кого-нибудь есть какие-либо идеи? Меня это начинает несколько раздражать...

Изменить:

Я узнал, что это связано с тем, что некоторые файлы xsd импортировали такие файлы:

<xs:import namespace="http://referenced/namespace"
           schemaLocation="referencedSchema.xsd" />

Мне кажется, что Maven игнорирует тег пространства имен. Как я могу сказать Maven прекратить это делать?


person Matthias    schedule 01.10.2019    source источник


Ответы (1)


Я могу ответить на свой вопрос очень, очень давно. Проблема заключалась в том, что мы также использовали плагин maven jaxws для создания веб-сервисов из файлов wsdl. Оба плагина фактически берут базовые файлы xsf и генерируют классы структуры данных для соответствующих пакетов. Таким образом, решение состоит в том, чтобы удалить плагин jaxb из файла pom. Все xsd генерируются только один раз.

person Matthias    schedule 13.11.2020