30

在构建战争文件时,我正在将一组 jar 从一个位置复制到战争中的一个文件夹。虽然文件确实被复制了,但是我认为它们被损坏了,因为在战争之外获取的 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

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

4

5 回答 5

67

删除<filtering>true</filtering>,它会损坏 jar 文件。

于 2012-05-29T12:25:33.577 回答
14

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

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

于 2013-04-18T16:50:30.120 回答
1

试试Maven 程序集插件。将自定义资源添加到 *.war 文件是我最喜欢的插件。另请参阅预定义描述符文件

于 2012-05-29T12:36:24.973 回答
1

添加后我遇到了类似的错误

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

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

于 2013-06-05T08:17:18.097 回答
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>
于 2018-12-20T13:20:53.620 回答