19

我在生成用于连接苹果推送服务的证书时遇到问题。当生成的 p12 文件位于我的 src/main/java 文件夹中时,一切正常,但我将其移至 src/main/resources 并决定停止使用以下错误:

DerInputStream.getLength(): lengthTag=111, too big.

了解更多细节:我正在使用 notnoop 推送通知库,并按照 Ray Wenderlich 的教程生成证书。之后,我习惯使用以下命令来生成用于 java 的 p12 文件:

openssl x509 -in aps_development.cer -inform DER -out aps_development.pem -outform PEM
openssl pkcs12 -nocerts -in single.p12 -out single.pem
openssl pkcs12 -export -inkey single.pem -in aps_development.pem -out dual.p12

之后,我将 dual.p12 移到了我的 java 项目中。起初,该文件位于我的 /src/main/java 文件夹中,假设为 at com.company.push.certificates(而请求该文件的代码位于com.company.push)。我通过使用请求输入流

InputStream stream = this.getClass().getResourceAsStream("certificates/dual.p12");

这在开发中工作正常,但在构建项目时(使用 maven)却不行,这就是为什么我使用完全相同的包将资源移动到资源文件夹的原因。资源仍然被找到,但现在我得到了上面提到的java.io.IOException

有谁知道这可能是什么原因造成的?

Ps:当我将文件移回 src/main/java 中的包时,一切正常,所以证书似乎是有效的。

4

3 回答 3

38

发生这种情况是因为 maven 的资源过滤正在破坏您的 p12 文件。

我们通过在pom.xml中从 maven 资源过滤中排除 p12 文件来解决这个问题:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
            <exclude>**/*.p12</exclude>
        </excludes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <includes>
            <include>**/*.p12</include>
        </includes>
    </resource>
</resources>
于 2014-12-19T15:11:19.030 回答
27

在构建之后检查证书文件的内容,当 maven 复制到 target/classes/... 可能是 maven 资源过滤,或者构建中的其他内容正在修改文件。验证类文件夹中的内容与资源文件夹中的内容完全相同。

http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

于 2013-06-25T13:26:43.777 回答
16

就我个人而言,我不喜欢在 maven 构建中复制 excludes/includes 部分并且有两个必须保持同步的资源部分 - 所以我更喜欢使用 maven 资源插件来配置 nonFilteredFileExtensions。

然后,构建部分中的资源部分就是(加上您可能需要的任何特定内容):

<resources>
   <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
   </resource>
</resources>

告诉 maven-resources-plugin 哪些文件在包括时不过滤:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.7</version>
        <configuration>
            <delimiters>
                <delimiter>@</delimiter>
            </delimiters>
            <nonFilteredFileExtensions>
                <nonFilteredFileExtension>p12</nonFilteredFileExtension>
                <nonFilteredFileExtension>pfx</nonFilteredFileExtension>
                <nonFilteredFileExtension>pem</nonFilteredFileExtension>
            </nonFilteredFileExtensions>
        </configuration>
    </plugin>

请参阅:http ://maven.apache.org/plugins/maven-resources-plugin/examples/binaries-filtering.html

于 2015-02-05T11:49:39.870 回答