我试图从XSD生成
java文件,但下面的代码不生成.如果我取消注释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.
解决方法
首先,你永远不应该在src / main / java中生成代码.生成的代码不应受版本控制,并且可以随时删除,因为它无论如何都会被重新生成.
生成的代码应始终位于目标下,即Maven的构建目录.默认情况下,jaxb2-maven-plugin
将在target/generated-sources/jaxb
下生成类,并且没有理由改变它.如果您正在使用Eclipse,则只需将此文件夹添加到构建路径中,方法是右键单击它并选择“构建路径>使用源文件夹”.
运行Maven时,您将使用mvn clean install运行它:它将清理目标文件夹并从头开始重新生成所有内容:这将导致安全且可维护的构建.您会发现这将解决您的问题:由于生成的类在构建之前被删除,因此它们将在下一次构建期间正确地重新生成.
当然,如果这个生成过程很长并且你不想每次都这样做,你可以只用mvn install运行Maven并配置插件不要通过将clearOutputDir
设置为false来删除以前生成的类.但请注意,虽然构建速度稍快,但如果更新后,您可能无法在XSD中检测到后续错误.