Apache POI通常通过Ant编译,并且有一些步骤,其中xmlbeans-Ant-task用于将OfficeOpenXML模式转换为代码。
我目前正在构建一组相应的Maven pom.xml文件,这些文件也会编译代码,以便更轻松地在Apache POI上运行Sonar检查。
然而,当XMLBeans生成代码时,一些生成的类看起来不同。
在Ant文件中,语句为:
<xmlbean
schema="${ooxml.encryption.xsd.dir}"
srcgendir="${ooxml.encryption.src.dir}"
optimize="yes"
destfile="${ooxml.encryption.jar}"
javasource="1.5"
failonerror="true"
fork="true"
memoryMaximumSize="${ooxml.memory}"
>
<classpath refid="ooxml.classpath"/>
</xmlbean>
在Maven中我使用
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xmlbeans-maven-plugin</artifactId>
<version>2.3.3</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>xmlbeans</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaDirectory>target/schemas</schemaDirectory>
<javaSource>1.5</javaSource>
<optimize>yes</optimize>
</configuration>
</plugin>
大多数类都是相同的,但其中一个具有不同名称的getter / setter,即
Ant产生
/**
* Gets the "encryptedKey" element
*/
com.microsoft.schemas.office.x2006.keyEncryptor.password.CTPasswordKeyEncryptor
getEncryptedPasswordKey();
但Maven产生了一个不同的吸气剂,请注意不同命名的方法:
/**
* Gets the "encryptedKey" element
*/
com.microsoft.schemas.office.x2006.keyEncryptor.password.CTPasswordKeyEncryptor
getEncryptedKey();
有什么方法可以解决这个问题吗?据我所知,使用完全相同的source-XSD,虽然我对XMLBeans知之甚少,所以它可能会在这里使用一些不同的设置...
答案 0 :(得分:1)
仅仅为了完整性......可以通过在配置部分添加以下内容来解决这个问题:
<xmlConfigs>
<xmlConfig implementation="java.io.File">../../src/ooxml/resources/org/apache/poi/poifs/crypt</xmlConfig>
</xmlConfigs>
...所以ant任务在与.xsds相同的目录中查找.xsdconfig文件,但需要明确指示maven ......