Remove file from dependency jar using maven

前端 未结 3 646
说谎
说谎 2020-12-06 10:18

I am trying to remove a file from a dependency jar that I am including in my war file in maven. I am deploying the war to JBoss 5.1 and the jar in question contains a persis

相关标签:
3条回答
  • 2020-12-06 10:43

    I guess you would have to use the maven shade plugin (see link below)

    Either build an Über-jar that includes your dependency minus the persistence-xml or just transform the dependency into something new that does not have the persistence.xml.

    This should be the way to go:

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

    Sean

    0 讨论(0)
  • 2020-12-06 10:44

    Not available out of the box AFAIK, you'll have to use the Maven AntRun plugin after package to do a few dirty things:

    • unzip the war in a temp directory
    • unzip the dependency in another temp directory
    • delete the file from the dependency
    • zip the temp directory of the dependency back into a jar
    • move the dependency back in the temp directory of the war
    • zip the temp directory of the webapp back into a war
    • delete the temp directory of the dependency
    • delete the temp directory of the webapp

    The following resources might help

    • ant task to remove files from a jar
    • RE: Removing a file from .jar file

    Now, if the problem is that JBoss is deploying the persistence unit defined in the persistence.xml (and you don't want that), there might be a better solution. It seems that you can declare files to ignore in a jboss-ignore.txt file, for example:

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

    The feature is there, but I've never used it.

    See

    • Excluding persistence.xml from deployment
    • JBoss5 custom metadata files
    0 讨论(0)
  • 2020-12-06 10:54

    You can achieve this with the TrueZIP Maven Plugin.

    This should work for your use case:

    <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>
    

    Also see the examples.

    0 讨论(0)
提交回复
热议问题