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

Mat*_*ell 15 maven-2

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

这是发生了什么:

my-webapp.war
|
`-- WEB-INF
    |
    `-- lib
        |
        `-- dependency.jar
            |
            `-- META-INF
                |
                `-- persistence.xml
Run Code Online (Sandbox Code Playgroud)

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

And*_*rea 11

您可以使用TrueZIP Maven插件实现此目的.

这适用于您的用例:

<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>
Run Code Online (Sandbox Code Playgroud)

另见示例.

  • 这真太了不起了!这应该是公认的答案,因为truezip插件可以完成所有手动操作. (3认同)

Pas*_*ent 5

没有开箱即用的AFAIK,你必须使用Maven AntRun插件后package做一些脏东西:

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

以下资源可能会有所帮助


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

WEB-INF/lib/dependency.jar/META-INF/persistence.xml
Run Code Online (Sandbox Code Playgroud)

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

看到