簡體   English   中英

使用 Maven 構建時 jar 文件已損壞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM