Создать контрольную сумму для всех артефактов maven

Я пытаюсь создать контрольную сумму SHA-1 для ВСЕХ артефактов, находящихся в настоящее время в моей сборке maven, и записать эти контрольные суммы в файл. В настоящее время я изучаю использование maven-install-plugin, который имеет встроенный генератор контрольных сумм.

https://maven.apache.org/plugins/maven-install-plugin/examples/installing-checksums.html

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

Дополнительная информация: Я использую Jenkins как инструмент для сборки, поэтому, если есть решение Jenkins, я тоже с этим согласен. Я сам не нашел, хотя.

1 ответ

Решение

Вы можете использовать Плагин Checksum Maven и его цель артефактов.

Я только что проверил следующий образец POM:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <id>create-jar-something</id>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <configuration>
                        <classifier>something</classifier>
                    </configuration>
                </execution>
                <execution>
                    <id>create-jar-else</id>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <configuration>
                        <classifier>else</classifier>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>net.ju-n.maven.plugins</groupId>
            <artifactId>checksum-maven-plugin</artifactId>
            <version>1.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>artifacts</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Примечание: я создаю три артефакта из этого проекта: по умолчанию один и два дополнительных банок с классификаторами.
Благодаря простому и простому исполнению artifacts цель, я получил следующее содержимое как часть сборки (mvn clean verify):

Через дополнительный individualFiles В записи конфигурации вы также можете решить, сохранять ли контрольные суммы в отдельных файлах (по умолчанию) или добавлять в один файл, а через individualFilesOutputDirectory В настройках записи вы можете перенаправить их создание в другое место, если это необходимо.

Следовательно, этот подход может удовлетворить ваши потребности, так как он автоматически обнаружит любой сгенерированный артефакт и вычислит для него контрольную сумму.

Также обратите внимание на мультимодульные проекты, которые согласно документации:

НЕ наследуется по умолчанию в многопроектных сборках.

В таком случае вы можете поместить фрагмент выше в pluginManagement раздел вашего pom родителя / агрегатора и просто повторно объявите плагин (но не его выполнение или его версию) в подмодулях, где вы хотите активировать поведение.

Следовательно, в вашем родительском / агрегаторе у вас может быть что-то вроде:

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>net.ju-n.maven.plugins</groupId>
            <artifactId>checksum-maven-plugin</artifactId>
            <version>1.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>artifacts</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>

И в модулях, для которых вы хотите включить это поведение, вы можете указать только:

<build>
    <plugins>
        <plugin>
            <groupId>net.ju-n.maven.plugins</groupId>
            <artifactId>checksum-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

И последнее, но не менее важное: если часть CI построена на Jenkins, вы также можете рассмотреть выделенный профиль для этого поведения и активировать его при сборке, но не как часть сборки по умолчанию.

Другие вопросы по тегам