7

我正在尝试从两个XSD模式生成源。我的JAXBMaven 插件如下所示:

<plugin>
    <groupId>com.sun.tools.xjc.maven2</groupId>
    <artifactId>maven-jaxb-plugin</artifactId>
    <version>1.1.1</version>
    <executions>
        <execution>
            <id>GenerateKenexa</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <includeBindings>
                    <includeBinding>**/jaxb-bindings-kenexa.xml</includeBinding>
                </includeBindings>
                <includeSchemas>
                    <includeSchema>**/KenexaXMLConfiguration.xsd</includeSchema>
                </includeSchemas>
            </configuration>
        </execution>
        <execution>
            <id>GenerateTalentQ</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <includeBindings>
                    <includeBinding>**/jaxb-bindings-talentq.xml</includeBinding>
                </includeBindings>
                <includeSchemas>
                    <includeSchema>**/TalentQXMLConfiguration.xsd</includeSchema>
                </includeSchemas>
            </configuration>
        </execution>
    </executions>
</plugin>

第一个生成得很好。但第二个没有。我在 Maven 输出中看到:

[INFO] --- maven-jaxb-plugin:1.1.1:generate (GenerateKenexa) @ online.tests.management ---
[INFO] Compiling file:/D:/Projects/GTIWebApplications/gti_online_tests_management/src/main/resources/xsd/KenexaXMLConfiguration.xsd
[INFO] Writing output to D:\Projects\GTIWebApplications\gti_online_tests_management\target\generated-sources\xjc
[INFO] 
[INFO] --- maven-jaxb-plugin:1.1.1:generate (GenerateTalentQ) @ online.tests.management ---
[INFO] files are up to date

它说文件是最新的,但它们甚至没有生成。可能有什么问题?

4

4 回答 4

19

对于像我一样提出这个问题的人,一年后:/

该问题在 maven-jaxb2-plugin 中仍然存在,它可能是 0.8.3 中的某种错误。当您将文件生成到同一目录中时,插件“认为”文件已经生成并跳过第二次执行。

我发现为了生成第二次执行,您必须设置参数

<forceRegenerate>true</forceRegenerate>

在配置部分。

于 2013-04-19T06:28:38.907 回答
4

我解决了这个问题。我已将 maven 插件更改jaxb为 mavenjaxb2插件,现在一切正常。现在我的 Maven 配置如下所示:

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.8.2</version>
    <executions>
        <execution>
            <id>GenerateKenexa</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <schemaDirectory>src/main/resources/xsd</schemaDirectory>
                <schemaIncludes>
                    <include>KenexaXMLConfiguration.xsd</include>
                </schemaIncludes>
                <generatePackage>com.groupgti.onlinetest.kenexa.jaxb</generatePackage>
                <generateDirectory>${project.build.directory}/generated-sources/kenexa</generateDirectory>
            </configuration>
        </execution>
        <execution>
            <id>GenerateTalentQ</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <schemaDirectory>src/main/resources/xsd</schemaDirectory>
                <schemaIncludes>
                    <include>TalentQXMLConfiguration.xsd</include>
                </schemaIncludes>
                <generatePackage>com.groupgti.onlinetest.talentq.jaxb</generatePackage>
                <generateDirectory>${project.build.directory}/generated-sources/talentq</generateDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>
于 2012-08-31T11:33:32.583 回答
2

当我到达这里时,我正在使用 jaxb2,但仍然面临问题。我从其他人的答案中将以下部分添加到配置中,现在可以使用。对于以前的答案,成功的部分应该是:

<generateDirectory>${project.build.directory}/generated-sources/kenexa</generateDirectory>

还需要一个唯一的执行 ID

<id>GenerateKenexa</id>

但是不同的目录使代码位于两个顶级包中,所以最后我正在使用:

<forceRegenerate>true</forceRegenerate>
于 2015-07-30T01:02:31.430 回答
1

首先,我建议为每个 xsd 指定单独的输出文件夹<outputdirectory>${basedir}/target/generated-sources/xjc</outputdirectory>

其次,尝试将其设置为单独的插件条目,而不是单独的执行:

<plugin>
    <groupId>com.sun.tools.xjc.maven2</groupId>
...
<includeSchema>**/KenexaXMLConfiguration.xsd...
...
</plugin>
<plugin>
    <groupId>com.sun.tools.xjc.maven2</groupId>
...
<includeSchema>**/TalentQXMLConfiguration.xsd...
...
</plugin>
于 2012-08-31T10:34:03.180 回答