2012-05-29 31 views
18

在構建戰爭文件時,我正在將一組jar從一個位置複製到戰爭中的文件夾。儘管文件被複制,但是我認爲它們會被破壞,因爲在戰爭之外拍攝的jar文件的相同類文件以調試器打開,而從戰爭文件中取出時不會打開。jar文件在使用maven構建時被破壞

這是我的戰爭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有一些罐子和其他一些文件 結果是: myWar/somefolder/a.jar文件,但當我打開這個罐子在debugger..i中的類得到錯誤的WinZip是

Invalid compressed data to extract. 
Severe Error: Compressed data is invalid 

但是同一個類文件可以當我以外,即原來的文件夾中查看查看戰爭。 那麼複製罐子時有錯誤嗎? 謝謝。

+0

罐子是一樣的嗎?相同的文件大小,也許相同的MD5校驗和... – cha0site

+0

文件大小是相同的,但MD5校驗和似乎不同..我檢查了md5.jar downlaoded從http://activityworkshop.net/software/md5/index.html ..可以'不明白爲什麼不同的校驗和? – pranay

回答

41

刪除<filtering>true</filtering>,它破壞了jar文件。

+0

太棒了!非常感謝Emmanuel ..這工作:)但仍然想知道爲什麼maven有這種奇怪的行爲?爲什麼過濾有用呢? – pranay

+3

例如,複製包含對項目版本的引用的文本資源時,過濾很有用。應用於二進制文件會破壞內容。 –

+0

再次感謝:) – pranay

9

此外,您還可以繼續受益使用Maven過濾不破壞裏面罐子(是的,我確實需要包裝與罐子內,使用過濾過)

我們選擇排除過濾擴展罐子。

在父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畢竟)。

除了避免檔案損壞之外,它還可以加速過程,因爲它不必過濾大型文件。

0

我有一個類似的錯誤,當我已經添加

<copy ...> 
<fileset ... /> 
<filterchain> 
    <tokenfilter> 
     <replacestring from="..." to="..." /> 
    </tokenfilter> 
</filterchain> 
</copy> 

在ANT我的副本任務。它在複製時損壞了jar文件。 我已經解決了這個問題,只適用於目標文本文件而不是jar文件。