我在使用生成的证书时遇到问题,我用它来连接苹果推送服务。 当生成的p12文件位于我的src / main / java文件夹中时,一切正常,但我将其移动到src / main / resources,它决定停止处理以下错误:
DerInputStream.getLength(): lengthTag=111, too big.
要了解更多细节: 我正在使用notnoop推送通知库,并按照Ray Wenderlich的教程生成证书。之后,我习惯按照命令生成p12文件,以便在java中使用:
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文件夹中,比如com.company.push.certificates
(请求文件的代码位于com.company.push
)。我使用
InputStream stream = this.getClass().getResourceAsStream("certificates/dual.p12");
这在开发中工作正常,但在构建项目时没有(使用maven),这就是为什么我使用完全相同的包将资源移动到资源文件夹。
资源仍然可以找到,但现在我得到了上面提到的java.io.IOException
任何人都知道造成这种情况的原因是什么?
Ps:当我将文件移回src / main / java中的包时,一切正常,所以证书似乎是有效的。
答案 0 :(得分:23)
在构建之后检查证书文件的内容,当maven复制到target / classes /时...可能是maven资源过滤或构建中的其他内容正在修改文件。验证classes文件夹中的内容与资源文件夹中的内容完全相同。
http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
答案 1 :(得分:21)
这是因为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>
答案 2 :(得分:13)
我个人不喜欢在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