1

Apache POI 通常通过 Ant 编译,并且有一些步骤,其中 xmlbeans-Ant-task 用于将 OfficeOpenXML 模式转换为代码。

我目前正在构建一组相应的 Maven pom.xml 文件,这些文件还编译代码,以便更轻松地在 Apache POI 上运行声纳检查。

然而,当 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,即

蚂蚁出品

/**
 * Gets the "encryptedKey" element
 */
com.microsoft.schemas.office.x2006.keyEncryptor.password.CTPasswordKeyEncryptor 
    getEncryptedPasswordKey();

但是 Maven 产生了一个不同的 getter,注意不同命名的方法:

/**
 * Gets the "encryptedKey" element
 */
com.microsoft.schemas.office.x2006.keyEncryptor.password.CTPasswordKeyEncryptor 
    getEncryptedKey();

有什么办法可以解决这个问题吗?据我所知,使用了完全相同的源 XSD,尽管我对 XMLBeans 知之甚少,所以这里使用的可能是一些不同的设置......

4

1 回答 1

1

只是为了完整性......这可以通过将以下内容添加到配置部分来解决:

<xmlConfigs>
    <xmlConfig implementation="java.io.File">../../src/ooxml/resources/org/apache/poi/poifs/crypt</xmlConfig>
</xmlConfigs>

...因此 ant 任务在与 .xsds 相同的目录中查找 .xsdconfig 文件,但需要明确指示 maven ...

于 2015-08-17T23:39:10.860 回答