【问题标题】:jar file gets corrupted while building with maven使用 maven 构建时 jar 文件损坏
【发布时间】:2012-05-29 11:00:49
【问题描述】:

在构建战争文件时,我正在将一组 jar 从某个位置复制到战争中的文件夹。虽然文件确实被复制了,但我认为它们已损坏,因为在战争之外获取的 jar 的相同类文件使用调试器打开,而从战争文件中获取后它没有打开。

这是我的战争 pom.xml 的一部分,我在其中复制 jar

<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

但是,当我在原始文件夹(即战争之外)中查看相同的类文件时,可以查看它。 那么在复制罐子时是否有错误? 谢谢。

【问题讨论】:

  • 罐子是一样的吗?相同的文件大小,可能相同的 md5 校验和...
  • 文件大小相同,但是 md5 校验和似乎不同..我检查了从 activityworkshop.net/software/md5/index.html 下载的 md5.jar ..不明白为什么不同的校验和??

标签: java maven-plugin maven-3


【解决方案1】:

删除&lt;filtering&gt;true&lt;/filtering&gt;,它会损坏jar文件。

【讨论】:

  • 太棒了!非常感谢 Emmanuel ..这有效:) 但仍然想知道为什么 maven 有这种奇怪的行为?那为什么过滤有用呢?
  • 例如,当您复制包含对项目版本的引用的文本资源时,过滤非常有用。应用于二进制文件会损坏内容。
  • 使用程序集插件时请注意,此设置可能不在 pom.xml 中,而是在关联的描述符 xml 文件中
  • 这里的重要说明,maven-resources-plugin 的默认过滤似乎是“true”,所以我需要将过滤显式设置为“false”,而不仅仅是删除该行
【解决方案2】:

此外,您可以继续使用 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)。

除了避免存档损坏之外,它还加快了进程,因为它不必过滤大文件。

【讨论】:

    【解决方案3】:

    试试Maven Assembly Plugin。将自定义资源添加到 *.war 文件是我最喜欢的插件。另见Pre-defined Descriptor Files

    【讨论】:

      【解决方案4】:

      我在添加时遇到了类似的错误

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

      到我在 ANT 中的复制任务。它在复制 jar 文件时损坏了它们。 我通过仅对目标文本文件而不是 jar 文件应用过滤器解决了这个问题。

      【讨论】:

      • 我的antrun插件也有同样的问题:你能解释一下如何解决这个问题吗?
      【解决方案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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-12
        • 2014-01-02
        • 2019-04-17
        • 2019-11-29
        • 1970-01-01
        相关资源
        最近更新 更多