Задать вопрос
@1q2w1q2w
sudo make install

Как написать Maven-плагин, который автоматизирует формирование архива с обновлением, в момент сборки проекта?

Всем привет!
У меня есть Java проект и мне нужно сделать maven-плагин для подготовки zip-архива с обновлениями программы. Архив имеет простую структуру: библиотеки в каталоге lib, обновления в каталоге upd и текстовый файл с номером сборки.
Задача проста-скопировать файлы в соответствующие директории и сжать выходную корневую папку в *.zip архив на этапе сборки.
Я нашел несколько плагинов, которые могут копировать и zip-файлы:
The Mojo Executer -для выполнения самодельных или других плагинов.
Antrun / Maven-плагин для сборки-для копирования каталогов и zip папок,
Maven-resources-plugin-для копирования указанных файлов.
Кроме того, я могу написать свой @MOJO - класс, который будет вручную копировать директории с помощью Apach FileUtils, например, и делать сжатие помощью Java-кода в моем классе @MOJO).
Пожалуйста, посоветуйте-какой путь верен? Написать Mojo-класс с описанными действиями или использовать готовые плагины?
Как задать в assembly плагине директории, которые мне нужно скопировать и создать архив?
Как записать build-number в файл?
Спасибо!
  • Вопрос задан
  • 291 просмотр
Подписаться 3 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@DS1977
Не знаю правильно или нет, но я делаю так:
1. Собираю все библиотеки в один jar:
<plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-shade-plugin</artifactId>
                        <version>2.3</version>
                        <configuration>
                            <createDependencyReducedPom>true</createDependencyReducedPom>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>shade</goal>
                                </goals>
                                <configuration>
                                    <transformers>
                                        <transformer
                                                implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                                        <transformer
                                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                            <mainClass>com.example.Main</mainClass>
                                        </transformer>
                                    </transformers>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

2. Архивирую
<plugin>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <version>2.5.3</version>
                        <configuration>
                            <descriptor>src/main/assembly/dep.xml</descriptor>
                        </configuration>
                        <executions>
                            <execution>
                                <id>create-archive</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

dep.xml
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>src</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>${project.basedir}</directory>
            <includes>
                <include>README*</include>
                <include>LICENSE*</include>
                <include>NOTICE*</include>
            </includes>
            <useDefaultExcludes>true</useDefaultExcludes>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>config.properties</include>
                <include>start.sh</include>
                <include>start.bat</include>
            </includes>
        </fileSet>
    </fileSets>
    <files>
        <file>
            <outputDirectory>/</outputDirectory>
            <source>${project.build.directory}/myproject-${project.version}.jar</source>
            <destName>myproject.jar</destName>
        </file>
    </files>
</assembly>


3. Конфигурирую deployment:
<plugin>
                        <artifactId>maven-deploy-plugin</artifactId>
                        <version>2.8.2</version>
                        <executions>
                            <execution>
                                <id>deploy-binaries</id>
                                <goals>
                                    <goal>deploy-file</goal>
                                </goals>
                                <configuration>
                                    <file>target/myproject-${project.version}-src.tar.gz</file>
                                    <repositoryId>repo</repositoryId>
                                    <artifactId>${project.artifactId}</artifactId>
                                    <groupId>${project.groupId}</groupId>
                                    <version>${project.version}</version>
                                    <packaging>tgz</packaging>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>



Прописать build-number в файл можно с ant-plugin:
Смотреть тута
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы