Вопрос по java – JAR-файл поврежден при сборке с Maven

23

при создании файла войны я копирую набор банок из папки в папку внутри войны. Несмотря на то, что файлы копируются, я думаю, что они повреждены, потому что файлы одного и того же класса из jar, взятые вне войны, открываются с помощью отладчика, но не открываются после извлечения из файла war.

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

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

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

Размер файла тот же, но контрольная сумма md5 кажется другой. Я проверил с помощью md5.jar, загруженного из Activityworkshop.net / Программное обеспечение / md5 / index.html .. не могу понять, почему разные контрольные суммы ?? pranay
А банки одинаковые? Тот же размер файла, может, та же контрольная сумма md5 ... cha0site

Ваш Ответ

5   ответов
54

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

отличный! большое спасибо Эммануэль .. это сработало :) но все еще задаюсь вопросом, почему у Мейвена такое странное поведение ?? Почему фильтрация полезна тогда? pranay
Filtering полезен, например, при копировании текстовых ресурсов, содержащих ссылки на версию проекта. Применительно к двоичным файлам это повредит содержимое. Emmanuel Bourg
при использовании плагина сборки обратите внимание, что этот параметр может быть не в файле pom.xml, а в соответствующем XML-файле дескриптора tobijdc
11

вы можете продолжать пользоваться преимуществами использования maven-фильтрации без разрушения jar-файлов внутри (да, мне нужно упаковать 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).

Помимо предотвращения повреждения архива, он также ускоряет процесс, поскольку не требует фильтрации больших файлов.

1

Maven Assembly Plugin. Это мой любимый плагин для добавления пользовательских ресурсов в файл * .war. Смотрите также Предопределенные файлы дескрипторов.

0

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

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

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

0

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

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

Похожие вопросы