【问题标题】:Packages are getting deleted while Generating Jaxb classes Using Maven and generated maven package name is incorrect使用 Maven 生成 Jaxb 类时,包被删除,生成的 Maven 包名称不正确
【发布时间】:2012-11-15 05:33:17
【问题描述】:

我尝试使用 jaxb2-maven-plugin 从 XSD 生成 Jaxb 类。

我能够在一个包中获取 jaxb 类,但我的其他包正在被删除。这是什么原因?如何克服这个?请你给建议。

以下是我尝试过的

<bulid>
    <pluginManagement>
    <plugins>
        <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <version>1.5</version>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>xjc</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <schemaDirectory>src/main/xsd</schemaDirectory>
            <outputDirectory>src/main/java</outputDirectory>
        </configuration>
        </plugin>
    </plugins>
    </pluginManagement>
    </bulid>

xsd 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?><xsd:schema targetNamespace="com.test.jaxb.model" 
        xmlns:ns="com.test.jaxb.model" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="TestResults">
        <xsd:sequence>
            <xsd:element maxOccurs="unbounded" minOccurs="0" name="testSuites" type="Q1:TestSuiteRun"/>
        </xsd:sequence>
        <xsd:attribute name="testProject" type="xsd:string"/>
    </xsd:complexType>


    <xsd:complexType name="TestCaseRun">
        <xsd:complexContent>
            <xsd:extension base="Q1:TestRun">
                <xsd:sequence>
        <xsd:element name="result" type="Q1:Severity"/>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="variations" type="Q1:VariationRun">
                    </xsd:element>
                </xsd:sequence>
                <xsd:attribute name="variationCount" type="xsd:int"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    </xsd:schema>

我已经给出了 targetNamespace="com.test.jaxb.model" 但是在生成之后我只能看到包名下的 jaxb 类:model.jaxb.test.com..

为什么包名被颠倒了,为什么我的其他包被删除了?

【问题讨论】:

    标签: java maven xsd jaxb jaxb2-maven-plugin


    【解决方案1】:

    您的主要问题是您将src/main/java 用作&lt;outputDirectory&gt;。这样做有两个主要问题。

    1. 生成的源代码将位于一个目录结构中,该目录结构在正常情况下受版本控制。您将如何处理生成的源?是否应该签入?您的 VCS 将发出信号,表明已找到尚未添加的新文件。
    2. 当您调用mvn clean 时,生成的源将不会被删除。

    您应该完全删除 &lt;outputDirectory&gt;src/main/java&lt;/outputDirectory&gt; 并让 maven 和插件工作。

    如果您删除这些行,您将在target/generated-sources 中生成源代码,并且它们compile 阶段编译,我认为这是您想要的。


    关于颠倒的包名我相信你应该把targetNamespace改成这样:

    <xsd:schema targetNamespace="http://www.test.com/jaxb/model"
        ...
    

    【讨论】:

    • 我做了这个改变,但文件生成如下 target>generate-source>jaxb>http>www_test_com>jaxb>model
    • 我想要 com.test.jaxb.model 之类的东西
    • 我自己试过了,我得到了com.test.jaxb.model,没有别的。我正在使用我建议的targetNamespace
    • mvn jaxb2:xjc 这是我用来运行插件的 wat
    • "生成的源代码将在一个目录结构中,在正常情况下是受版本控制的。" => 不应该!如果你使用 Maven 或其他工具,它也会为生成的源创建这些文件夹,而 Git 默认会检测到它必须 .gitignore 它!您不应将生成的源代码签入源代码管理。这实际上是不好的做法。最好修复您的构建过程,以便它以您想要的方式生成源。否则,重新生成它的每个人都必须执行您为修复它们所做的手动步骤。手动 == 邪恶 :)
    【解决方案2】:

    问题解决了:

    <bulid>
        <pluginManagement>
        <plugins>
            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.5</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <schemaDirectory>src/main/xsd</schemaDirectory>
                <outputDirectory>src/main/java</outputDirectory>
                <packageName>com.test.jaxb.model</packageName>
                <clearOutputDir>false</clearOutputDir>
            </configuration>
            </plugin>
        </plugins>
        </pluginManagement>
        </bulid>
    

    我从 xsd 中删除了 targetNameSpace

    mvn jaxb2:xjc 工作!!

    【讨论】:

    • 这不是您应该解决问题的方式。以后你会头疼的。
    【解决方案3】:

    在配置标签下添加下面的属性。

    <clearOutputDir>false</clearOutputDir>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 2012-04-06
      • 2015-11-15
      • 2016-06-24
      • 2021-01-22
      相关资源
      最近更新 更多