在构建一个战争文件时,我将一组罐子从一个位置复制到战争中的一个文件夹中。虽然文件确实被复制,但我认为它们被损坏了,因为在战争之外获取的 jar 的相同类文件会用调试器打开,而从战争文件获取后不会打开。
这是我的 war pom.xml 的一部分,我在其中复制 jar
<execution>
<id>copy-jars</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/${project.artifactId}-${buildNumber}/somefolder</outputDirectory>
<resources>
<resource>
<directory>SomeSourceDirectory</directory>
<filtering>true</filtering>
<includes>
<include>**/**</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
SomeSourceDirectory 有一些 jar 和其他一些文件 结果是: myWar/somefolder/a.jar 但是当我在调试器中打开这个 jar 内的类时..我在 WinZip 中收到错误
Invalid compressed data to extract.
Severe Error: Compressed data is invalid
但是,当我在原始文件夹(即战争之外)中查看它时,可以查看相同的类文件。 那么复制罐子时是否有错误? 谢谢。
删除
<filtering>true</filtering>
,它会损坏 jar 文件。
此外,您可以继续使用 Maven 过滤,而不会损坏内部的 jar。
我们选择从过滤的扩展中排除 jar。
在父pom的pluginManagement部分我们放置此配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>jar</nonFilteredFileExtension>
<nonFilteredFileExtension>pdf</nonFilteredFileExtension>
<nonFilteredFileExtension>swf</nonFilteredFileExtension>
<nonFilteredFileExtension>zip</nonFilteredFileExtension>
<nonFilteredFileExtension>bz2</nonFilteredFileExtension>
<nonFilteredFileExtension>gz</nonFilteredFileExtension>
<nonFilteredFileExtension>acp</nonFilteredFileExtension>
<nonFilteredFileExtension>bin</nonFilteredFileExtension>
<nonFilteredFileExtension>odt</nonFilteredFileExtension>
<nonFilteredFileExtension>doc</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
注意我们添加了 jar 扩展名以及默认的 Maven 排除文件类型(毕竟是 zip)。
除了避免存档损坏之外,它还可以加快进程,因为它不必过滤大文件。
尝试 Maven 组装插件。这是我最喜欢的将自定义资源添加到 *.war 文件的插件。另请参阅预定义描述符文件。
我添加时也遇到类似的错误
<copy ...>
<fileset ... />
<filterchain>
<tokenfilter>
<replacestring from="..." to="..." />
</tokenfilter>
</filterchain>
</copy>
我在 ANT 中的复制任务。复制 jar 文件时它损坏了它们。 我通过仅在目标文本文件上应用过滤器而不是在 jar 文件上解决了这个问题。
除了其他答案之外,另一个选项是仅对需要过滤的资源启用过滤:
<build>
...
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>core.properties</include>
</includes>
</resource>
<resource>
<filtering>false</filtering>
<directory>src/main/resources</directory>
<includes>
<include>pdf/color_profile/sRGB.icc</include>
</includes>
</resource>
</resources>
</build>