2012-05-29 10 views
18

podczas budowania pliku wojny Kopiuję zestaw słoików z lokalizacji do folderu wewnątrz wojny. Podczas gdy pliki są kopiowane, jednak myślę, że ulegają uszkodzeniu, ponieważ te same pliki klas słoików, które zostały pobrane poza wojnę, są otwierane za pomocą debuggera, podczas gdy nie otwiera się po pobraniu z pliku wojennego.plik jar zostaje uszkodzony podczas budowania z maven

To jest część mojego wojennego pom.xml gdzie skopiować słoików

<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 ma kilka słoików i kilka innych plików wynik jest: myWar/somefolder/a.jar ale gdy otwieram klas wewnątrz tego słoika w debugger..i się błąd w WinZip że

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

jednak ten sam plik klasy mogą być oglądane kiedy zobaczyć go w oryginalnym folderze tj zewnątrz wojna. Czy istnieje błąd podczas kopiowania słoików? Dzięki.

+0

Czy słoiki są takie same? Ten sam rozmiar pliku, może ta sama suma kontrolna md5 ... – cha0site

+0

rozmiar pliku jest taki sam, jednak suma kontrolna md5 wydaje się być inna ... sprawdzono, czy plik md5.jar został zrzucony z http://activityworkshop.net/software/md5/index.html ..can ' zrozumieć, dlaczego różne sumy kontrolne? – pranay

Odpowiedz

41

Usuń <filtering>true</filtering>, powoduje uszkodzenie plików JAR.

+0

świetnie! Wielkie dzięki Emmanuel ... to działało :) ale wciąż zastanawiasz się dlaczego maven ma takie dziwne zachowanie ?? Dlaczego filtrowanie jest wtedy użyteczne? – pranay

+3

Filtrowanie jest przydatne, gdy na przykład kopiowane są zasoby tekstowe zawierające odniesienia do wersji projektu. Zastosowane w plikach binarnych spowoduje uszkodzenie zawartości. –

+0

jeszcze raz dziękuję :) – pranay

9

Ponadto, można nadal korzystać z korzyści filtrowanie maven bez uszkadzania słoików wewnątrz (tak ja trzeba pakować ze słoików wewnątrz i używać zbyt filtrowanie)

Wybieramy wykluczyć słoik z filtrowanych rozszerzeń.

zab sekcji pluginManagement POM dominującej stawiamy tę konfigurację

<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> 

Uwaga dodaliśmy rozszerzenia jar, jak również domyślne Maven wykluczonych typów plików (jego zip po wszystkich).

Oprócz unikania uszkodzenia archiwum przyspiesza to proces, ponieważ nie musi filtrować dużych plików.

0

Miałem podobny błąd podczas Dodałem

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

do mojego zadania kopiowania w ANT. Spowoduje to uszkodzenie plików JAR podczas ich kopiowania. Rozwiązałem to, stosując filtr TYLKO w docelowych plikach tekstowych, a nie w plikach jar.

Powiązane problemy