maven zip uber-jar и сценарий оболочки

Я хотел бы, чтобы maven объединил uber-jar, созданный шейд-плагином, и сценарий оболочки из каталога all_files.

Структура проекта выглядит так:

all_files/
    mvn_script.sh
    projB-shaded.jar

    maven_project/
        guide/
            parent-pom.xml
        projA/
            pom.xml
        projB/
            pom.xml

JAR-файл создается файлом pom проекта B, а затем помещается в крайнюю папку, чтобы быть готовым к архивированию с помощью сценария оболочки. Причина в том, что сценарий оболочки может вызывать файл jar для выполнения проекта.

Я хочу, чтобы другие программисты могли легко разархивировать файл и без проблем запустить сценарий оболочки. И мне также нужно, чтобы maven упаковал скрипт и банку вместе. Я точно не знаю, как реализовать это в затененном плагине.

Примечание. Я не хочу использовать сборочный плагин, потому что он плохо упаковывает зависимые банки.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.3</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <minimizeJar>true</minimizeJar>
          <outputFile>../../guide/${project.artifactId}-${project.version}-shaded.jar</outputFile>
          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <manifestEntries>
                <Main-Class>projB.classB</Main-Class>
              </manifestEntries>
            </transformer>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>                    

person Max    schedule 12.02.2016    source источник


Ответы (1)


Вы не хотите использовать maven-assembly-plugin для создания uber-jar. Но вы захотите использовать его для создания этого ZIP.

В настоящее время ваш maven-shade-plugin привязан к фазе package. Вы можете перенести это выполнение на фазу prepare-package (поскольку она фактически подготавливает вашу окончательную упаковку) добавить выполнение maven-assembly-plugin, привязанное к фазе package. Ваша сборка создаст ZIP-файл на основе затененного JAR-файла (который будет существовать, поскольку плагин затенения будет выполнен) и сценария оболочки.

Примерный дескриптор будет следующим:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
    <id>your-id</id>
    <formats>
        <format>zip</format>
    </formats>
    <files>
        <file>
            <source>${project.build.directory}/projB-shaded.jar</source>
            <outputDirectory>/</outputDirectory>
        </file>
        <file>
            <source>/path/to/mvn_script.sh</source>
            <outputDirectory>/</outputDirectory>
        </file>
    </files>
</assembly>

со следующей конфигурацией POM:

<plugin>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.3</version>
    <executions>
        <execution>
            <phase>prepare-package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <!-- current configuration -->
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <id>assemble</id>
            <goals>
                <goal>single</goal>
            </goals>
            <phase>package</phase>
            <configuration>
                <descriptors>
                    <descriptor>/path/to/assembly.xml</descriptor>
                </descriptors>
            </configuration>
        </execution>
    </executions>
</plugin>

Типичное расположение дескриптора сборки находится под src/assembly согласно Стандартный макет каталога Maven.

person Tunaki    schedule 12.02.2016
comment
Как добавить оба файла projB-shaded.jar и mvn_script.sh в один zip-файл? - person Abhi; 20.12.2017
comment
Запуск тени в пакете подготовки приводит к сбою. Кажется, он должен работать в пакете, или есть другая конфигурация, позволяющая запускать его раньше? - person puhlen; 02.02.2018