[英]jar file gets corrupted while building with maven
在構建戰爭文件時,我將一組 jars 從一個位置復制到戰爭內的文件夾。 雖然文件確實被復制了,但是我認為它們會被損壞,因為在戰爭之外提取的 jar 的相同類文件用調試器打開,而從戰爭文件中提取后它沒有打開。
這是我的戰爭 pom.xml 的一部分,我在其中復制了罐子
<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有一些 jars 和一些其他文件 結果是: myWar/somefolder/a.jar 但是當我在調試器中打開這個 jar 中的類時..我在 WinZip 中得到錯誤
Invalid compressed data to extract.
Severe Error: Compressed data is invalid
但是,當我在原始文件夾(即戰爭之外)中查看它時,可以查看相同的類文件。 那么在復制 jars 時是否有錯誤? 謝謝。
刪除<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.