Подтвердить что ты не робот

Файл 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, но когда я открываю классы внутри этой банки в отладчике.., я получаю ошибку в WinZip, которая

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

Однако тот же файл класса можно просмотреть, когда я просматриваю его в оригинальной папке, а не за ее пределами. Так есть ошибка при копировании банок? Спасибо.

4b9b3361

Ответ 1

Удалите <filtering>true</filtering>, он повреждает файлы jar.

Ответ 2

Кроме того, вы можете продолжать использовать фильтрацию maven без развращения банок внутри (да, мне нужно упаковать с банками внутри И использовать фильтрацию тоже)

Мы выбираем исключить jar из фильтрованных расширений.

В разделе раздела pluginManagement родительского pom мы помещаем эту конфигурацию

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

Кроме того, чтобы избежать повреждения архива, он также ускоряет процесс, так как он не должен фильтровать большие файлы.

Ответ 4

У меня была аналогичная ошибка, когда я добавил

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

для моей задачи копирования в ANT. При копировании они повреждали файлы jar. Я решил это, применяя фильтр ТОЛЬКО на целевых текстовых файлах, а не на файлах jar.

Ответ 5

В дополнение к другим ответам, другой вариант - включить фильтрацию только для тех ресурсов, которые требуют фильтрации:

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