使用maven构建时,jar文件被破坏

时间:2012-05-29 11:00:50

标签: java maven-plugin maven-3

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

然而,当我在原始文件夹中查看时,即在战争之外,可以查看相同的类文件。 复制罐子时有错误吗? 感谢。

5 个答案:

答案 0 :(得分:56)

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

答案 1 :(得分:11)

此外,您可以继续使用maven过滤而不会损坏内部的jar(是的,我确实需要使用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排除文件类型(毕竟它是一个拉链)。

除了避免存档损坏外,它还可以加快处理速度,因为它不需要过滤大文件。

答案 2 :(得分:1)

试试Maven Assembly Plugin。这是我最喜欢的插件,可以将自定义资源添加到* .war文件中。另请参阅Pre-defined Descriptor Files

答案 3 :(得分:0)

我添加

时出现了类似的错误
<copy ...>
<fileset ... />
<filterchain>
    <tokenfilter>
         <replacestring from="..." to="..." />
    </tokenfilter>
</filterchain>
</copy>

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

答案 4 :(得分: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>