2011-11-04 97 views
0

我尝试使用JAXB2 maven插件从一堆.xsd文件生成java代码。如果我尝试在一次执行中从所有xsds生成,我会得到org.xml.sax.SAXParseException: 'root' is already defined。我无法修改xsd文件,因此我需要独立生成每个文件。我发现下面的POM的配置来实现的是:jaxb2 maven插件和配置里面的执行标签

<plugin> 
<groupId>org.codehaus.mojo</groupId> 
<artifactId>jaxb2-maven-plugin</artifactId> 
<version>1.3</version> 
<executions> 
    <execution> 
     <id>jaxb-Execution1</id> 
     <phase>generate-sources</phase> 
     <goals><goal>xjc</goal></goals> 
     <configuration> 
      <schemaDirectory>${jaxbSchemaDirectory}</schemaDirectory> 
      <outputDirectory>${jaxbGenerateDirectory}</outputDirectory> 
      <staleFile>${jaxbGenerateDirectory}/.staleFlagExecution1</staleFile> 
      <bindingDirectory>${jaxbSchemaDirectory}</bindingDirectory> 
      <bindingFiles>bindings1.xml</bindingFiles> 
      <schemaFiles>schema1.xsd</schemaFiles> 
      <clearOutputDir>false</clearOutputDir> 
     </configuration> 
    </execution> 
    <execution> 
     <id>jaxb-Execution2</id> 
     <phase>generate-sources</phase> 
     <goals><goal>xjc</goal></goals> 
     <configuration> 
      <schemaDirectory>${jaxbSchemaDirectory}</schemaDirectory> 
      <outputDirectory>${jaxbGenerateDirectory}</outputDirectory> 
      <staleFile>${jaxbGenerateDirectory}/.staleFlagExecution2</staleFile> 
      <bindingDirectory>${jaxbSchemaDirectory}</bindingDirectory> 
      <bindingFiles>bindings2.xml</bindingFiles> 
      <schemaFiles>schema2.xsd</schemaFiles> 
      <clearOutputDir>false</clearOutputDir> 
     </configuration> 
    </execution> 
</executions> 

但是,这是行不通的。问题是配置不从执行块内部读取。这是为什么?我正在使用maven 2.2.1。

+0

你有没有定义的属性,比如'$ {jaxbSchemaDirectory}'在你的pom.xml中? – flash

+1

@flash是的,我有。我还输入了没有任何属性占位符的目录进行测试。问题在于插件忽略了执行块中的那些配置。 – Devnullable

回答

2

我有同样的问题,当我试图使用运行插件:

mvn jaxb2:xjc 

用于我的解决方法是使用:

mvn generate-sources