Maven: разархивируйте zip-файл на основе os в WEB-INF / lib - PullRequest
1 голос
/ 10 февраля 2020

У меня есть 2 .zip файла: shared-lib- windows .zip и shared-lib- linux .zip. Jav-файл зависимостей maven ищет каталог shared-lib в WEB-INF / lib / и ожидает, что в каталоге shared-lib будет присутствовать файл .exe или .out.

Как настроить .zip файлы в моем pom. xml, чтобы подобрать соответствующий zip-файл, распаковать его в переименованный (shared-lib, без -os) каталог?

Я уже настроил зависимость maven (jar) as:

    <profiles>
        <profile>
            <id>Linux</id>
            <dependencies>
                <dependency>
                    <groupId>com.dependency</groupId>
                    <artifactId>depedency-linux</artifactId>
                    <version>0.0.9</version>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>Windows</id>
            <dependencies>
                <dependency>
                    <groupId>com.dependency</groupId>
                    <artifactId>dependency-windows</artifactId>
                    <version>0.0.9</version>
                </dependency>
            </dependencies>
        </profile>
    </profiles>

Теперь я просто хочу, чтобы Maven взял файлы .zip из src / main / resources или .m2 /.../ и сделал волхвы c!

Я посмотрел ответы, в которых предлагался maven-ant-plugin, но кто-то упомянул, что это будет uncool .

[edit: add info] У меня упакован веб-проект Maven как .war и развернут в Tomcat. Кроме того, файлы .exe / .out являются сторонней зависимостью размером 120/150 МБ соответственно. Поскольку мой git не поддерживает большие файлы и двоичные файлы не будут обновляться, я заархивировал его и добавил в свой управляемый Git веб-проект Maven.

1 Ответ

0 голосов
/ 13 февраля 2020

Я просмотрел официальную документацию о профилях, фазах и свойствах Maven. Я придумал решение, которое использует maven-antrun-plugin . Я все еще ищу решение, которое не полагается на него.

Запустите приведенную ниже помпу. xml на Linux с: mvn package -P Linux

<profiles>
    <profile>
        <id>Linux</id>
        <properties>
            <binary.zip>${project.basedir}/src/main/resources/binary-linux.zip</binary.zip>
            <unzip.folder>${project.build.directory}/${project.build.finalName}/WEB-INF/lib/binary</unzip.folder>
        </properties>
        <dependencies>
            <dependency>
                <groupId>com.dependency</groupId>
                <artifactId>depedency-linux</artifactId>
                <version>0.0.9</version>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>Windows</id>
        <properties>
            <binary.zip>${project.basedir}/src/main/resources/binary-windows.zip</binary.zip>
            <unzip.folder>${project.build.directory}/${project.build.finalName}/WEB-INF/lib/binary</unzip.folder>
        </properties>
        <dependencies>
            <dependency>
                <groupId>com.dependency</groupId>
                <artifactId>dependency-windows</artifactId>
                <version>0.0.9</version>
            </dependency>
        </dependencies>
    </profile>
</profiles>
...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>unzip-binary</id>
            <phase>prepare-package</phase>
            <configuration>
                <tasks>
                    <echo message="unzip the binary" />
                    <unzip src="${binary.zip}" dest="${unzip.folder}" />
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Это позволит извлечь .zip в каталог ..WEB-INF / lib / binary (на этапе подготовки пакета) перед его архивированием в .war (на этапе подготовки пакета) с помощью плагина maven-war-plugin.

...