Удалить файл из бана зависимости, используя maven

Я пытаюсь удалить файл из контейнера зависимости, который я включаю в свой военный файл в maven. Я развертываю войну в JBoss 5.1, и в обсуждаемом jar файле содержится файл persistence.xml, который мне не нужен.

Вот что происходит:

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

Когда я строю свою войну, я хочу удалить persistence.xml У любого есть идея, если это можно сделать легко?

Ответы

Ответ 1

Недоступно из коробки AFAIK, вам нужно будет использовать плагин Maven AntRun после package, чтобы сделать несколько грязных вещей:

  • распакуйте войну в каталог temp
  • разархивируйте зависимость в другом временном каталоге
  • удалить файл из зависимости
  • zip каталог temp зависимости обратно в банку
  • переместить зависимость обратно в каталог temp войны
  • zip каталог temp webapp обратно в войну
  • удалить временную директорию зависимостей
  • удалить временную директорию webapp

Следующие ресурсы могут помочь


Теперь, если проблема в том, что JBoss развертывает блок персистентности, определенный в persistence.xml (и вы этого не хотите), может быть лучшее решение. Кажется, что вы можете объявлять файлы для игнорирования в файле jboss-ignore.txt, например:

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

Функция есть, но я никогда не использовал ее.

См

Ответ 2

Вы можете достичь этого с помощью 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>

Также см. примеры.

Ответ 3

Я предполагаю, что вам нужно будет использовать плагин maven shade (см. ссылку ниже)

Либо создайте Über-jar, который включает в себя вашу зависимость минус persistence-xml, либо просто преобразуйте зависимость в нечто новое, у которого нет persistence.xml.

Это должен быть путь:

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

Шон