使用maven从依赖jar中删除文件

时间:2010-05-13 22:53:22

标签: maven-2

我正在尝试从我在maven中的war文件中包含的依赖jar中删除一个文件。我正在将战争部署到JBoss 5.1,并且有问题的jar包含一个我不想要的persistence.xml文件。

以下是发生的事情:

my-webapp.war
|
`-- WEB-INF
    |
    `-- lib
        |
        `-- dependency.jar
            |
            `-- META-INF
                |
                `-- persistence.xml

当我构建我的战争时,我想删除persistence.xml任何人都知道这是否可以轻松完成?

3 个答案:

答案 0 :(得分:11)

您可以使用TrueZIP Maven Plugin实现此目的。

这适用于您的用例:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>truezip-maven-plugin</artifactId>
    <version>1.1</version>
    <executions>
        <execution>
            <id>remove-a-file-in-sub-archive</id>
            <goals>
                <goal>remove</goal>
            </goals>
            <phase>package</phase>
            <configuration>
                <fileset>
                    <directory>target/my-webapp.war/WEB-INF/lib/dependency.jar/META-INF</directory>
                    <includes>
                        <include>persistence.xml</include>
                    </includes>
                </fileset>
            </configuration>
        </execution>
    </executions>
</plugin>

另见the examples

答案 1 :(得分:5)

AFAIK开箱即用,您必须在package之后使用Maven AntRun插件做一些脏事:

  • 将战争解压缩到临时目录
  • 将依赖项解压缩到另一个临时目录
  • 从依赖项中删除文件
  • 将依赖项的临时目录压缩回jar
  • 将依赖项移回战争的临时目录
  • 将webapp的临时目录压缩回战争
  • 删除依赖项的临时目录
  • 删除webapp的临时目录

以下资源可能会有所帮助


现在,如果问题是JBoss正在部署persistence.xml中定义的持久性单元(并且您不希望这样),那么可能有更好的解决方案。您似乎可以在jboss-ignore.txt文件中声明要忽略的文件,例如:

WEB-INF/lib/dependency.jar/META-INF/persistence.xml

功能就在那里,但我从未使用过它。

答案 2 :(得分:0)

我猜你必须使用maven shade插件(见下面的链接)

构建一个包含依赖项减去persistence-xml的Über-jar,或者只是将依赖项转换为没有persistence.xml的新内容。

这应该是要走的路:

http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html

肖恩