Плагин JAXB maven не генерирует классы

Я пытаюсь создать java-файлы из XSD, но приведенный ниже код не генерирует. Если я раскомментирую outputDirectory, он работает, но Сначала удалите папку. добавление clearOutputDir = false также ничего не генерирует.

<build>
        <plugins>
            <!-- JAXB xjc plugin that invokes the xjc compiler to compile XML schema into Java classes.-->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxb2-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>xjc</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!-- The package in which the source files will be generated. -->
                    <packageName>uk.co.infogen.camel.message</packageName>
                    <!-- The schema directory or xsd files. -->
                    <sources>
                        <source>${basedir}/src/main/resources/xsd</source>
                    </sources>
                    <!-- The working directory to create the generated java source files. -->
                    <!--<outputDirectory>${basedir}/src/main/java</outputDirectory>
                    <clearOutputDir>false</clearOutputDir>-->
                </configuration>
            </plugin>
        </plugins>
    </build>

Я получаю сообщение:

[INFO] --- jaxb2-maven-plugin:2.2:xjc (default) @ service-business ---
[INFO] Ignored given or default xjbSources [/Users/aaa/development/workspace/infogen/infogen_example/service-business/src/main/xjb], since it is not an existent file or directory.
[INFO] No changes detected in schema or binding files - skipping JAXB generation.

1 ответов


первое, что вы должны никогда, генерировать код внутри src/main/java. Сгенерированный код не должен контролироваться версиями и может быть удален в любое время, так как он будет восстановлен в любом случае.

сгенерированный код всегда должен находиться под target, каталог сборки Maven. The jaxb2-maven-plugin будет генерировать классы по умолчанию под target/generated-sources/jaxb и на самом деле нет причин менять это. Если вы используете Eclipse, вы просто нужно добавить эту папку в путь сборки, щелкнув ее правой кнопкой мыши и выбрав "путь сборки > использовать исходную папку".

при запуске Maven, вы будете запускать его с mvn clean install: Он очистит target папка и восстановить все с нуля: это приводит к безопасной и ремонтопригодной строить. Вы обнаружите, что это решит вашу проблему: поскольку сгенерированные классы удаляются до сборки, они будут правильно сгенерированы во время следующей сборки.

конечно, если этот процесс поколения и вы не хотите делать это каждый раз, вы можете запустить Maven с просто mvn install и настройте плагин, чтобы не удалять ранее созданные классы, установив clearOutputDir to false. Но обратите внимание, что, хотя сборка будет немного быстрее, вы можете не обнаружить последующие ошибки в XSD, если они будут обновлены.