使用maven-jaxb2-plugin生成java源时,如何为集合启用setter?

时间:2012-11-11 20:28:18

标签: java xjc maven-jaxb2-plugin

我使用maven-jab2-plugin从XSD架构生成POJO。我生成的类没有任何集合的字段的setter。如何为集合生成setter?

任何人都可以解释默认情况下不启用setter的原因吗?

2 个答案:

答案 0 :(得分:7)

使用JAXB2-Basics中包含的Setters plugin,如文档here所述。

我已经复制了他们的用法示例(并将其修改为专门显示setter):

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.7.0</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <args>
            <arg>-Xsetters</arg>
        </args>
        <plugins>
            <plugin>
                <groupId>org.jvnet.jaxb2_commons</groupId>
                <artifactId>jaxb2-basics</artifactId>
                <version><!-- Current version --></version>
            </plugin>
        </plugins>
    </configuration>
</plugin>

在依赖项中包含JAXB2 Basics Runtime包:

<dependency>
    <groupId>org.jvnet.jaxb2_commons</groupId>
    <artifactId>jaxb2-basics-runtime</artifactId>
    <version><!-- Current version --></version>
</dependency>

答案 1 :(得分:0)

为了生成用于收集的 setter,我只找到了一个适合我的解决方案。您必须向 org.andromda.thirdparty.jaxb2_commons 添加依赖项。但是,此解决方案适用于 jaxb2-maven-plugin 版本 2.5.0,对于版本 2.3.1 不起作用。 举个例子:

 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>2.5.0</version>
    <dependencies>
      <dependency>
         <groupId>org.andromda.thirdparty.jaxb2_commons</groupId>
         <artifactId>collection-setter-injector</artifactId>
         <version>1.0</version>
      </dependency>
   </dependencies>
   <executions>
      <execution>
             ......
       </execution>
    </executions>
    <configuration>
       <sources>
             ......
       </sources>
       <arguments>-Xcollection-setter-injector</arguments>
       <clearOutputDir>false</clearOutputDir>
       <extension>true</extension>
    </configuration>
</plugin>