【问题标题】:Remove file from dependency jar using maven使用maven从依赖jar中删除文件
【发布时间】:2010-05-13 22:53:21
【问题描述】:

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

这是怎么回事:

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

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

【问题讨论】:

    标签: maven-2


    【解决方案1】:

    您可以通过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

    【讨论】:

    • 这太棒了!这应该是公认的答案,因为 truezip 插件可以让您摆脱所有手动工作。
    【解决方案2】:

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

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

    以下资源可能会有所帮助


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

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

    这个功能是有的,但我从来没有用过。

    【讨论】:

      【解决方案3】:

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

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

      这应该是要走的路:

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

      肖恩

      【讨论】:

      • 我想过,但你会如何将它插入构建中?你会如何告诉 maven war 插件选择 überjar 而不是“真正的”依赖项。
      • 为war插件的依赖添加分类器。添加一个部署生命周期,将 uberjar 部署到您的构建中。实际上,本地安装可能就可以了。看看maven.apache.org/plugins/maven-install-plugin/…肖恩
      猜你喜欢
      • 2015-03-07
      • 2016-10-16
      • 2015-09-23
      • 2015-02-19
      • 2019-10-06
      • 1970-01-01
      • 2012-06-17
      • 2011-05-21
      • 2018-02-25
      相关资源
      最近更新 更多