rpm-maven-plugin, как управлять именем, под которым rpm хранится в репозитории m2?

У нашей организации есть соглашение по наименованию rpms. Как правило, rpm будет иметь более короткое базовое имя, чем проект Maven. Существует также соглашение о том, как называются релизы. Итак, мы хотим имя как${shortname}-${project.version}-${release}.noarch.rpm,

Я хочу создать такие rpms, используя rpm-maven-plugin, а не более старую технологию nmake.

И это легко сделать, используя параметры плагина. Rpm, сгенерированный в целевой директории, имеет желаемое имя.

Однако когда mvn install устанавливает этот rpm в репозиторий maven, он настаивает на сохранении его "maven way": ${project.artifactId}-${project.version}.rpm

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

Как я могу сделать это?

Обновление: я пытался использовать maven-install-plugin (цель install-file) и не получил результаты, которые были после. Но это было отчасти потому, что я не вызывал это должным образом. Это не вызывалось. Если вы определяете цель установки файла, она должна быть явно привязана к фазе установки. Делая так, т.е. добавляя <phase>install</phase> к конфигурации по крайней мере вызывал выполнение установки, которую я хотел, но это все еще не позволяло мне называть rpm по желанию.

1 ответ

По словам Карла Хайнца Марбеза, коммиттера проекта Apache Maven, то, что я пытаюсь сделать, невозможно, и не следует пытаться.

Однако мне нужно то, что мне нужно, и я нашел компромисс, который дает мне большую часть этого. Единственной вещью, которой я должен был пожертвовать, было предположение, что RPM хранилища должен находиться в том же каталоге хранилища, что и остальная часть проекта. Это очень незначительная жертва. Как только я это сделаю, я могу сохранить rpm, названный так, как я хочу, в каталоге репозитория Maven с коротким именем.

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.5.2</version>
        <executions>
                <execution>
                        <id>install-rpm</id>
                        <goals>
                                <goal>install-file</goal>
                        </goals>
                        <phase>install</phase>
                        <configuration>
                                <file>${project.build.directory}/rpm/${rpm.name}/RPMS/noarch/${rpm.name}-${project.version}-${rpm.release}.noarch.rpm</file>
                                <groupId>${project.groupId}.rpms</groupId>
                                <artifactId>${rpm.name}</artifactId>
                                <version>${project.version}-${rpm.release}</version>
                                <classifier>noarch</classifier>
                                <packaging>rpm</packaging>
                        </configuration>
                </execution>
        </executions>
</plugin>

Использование groupId из ${project.groupId}.rpms а не просто ${project.groupId} позволяет всем построенным таким образом RPM жить за пределами основной ветви репозитория, что полезно в нашей ситуации.

Используя версию ${project.version}-${rpm.release} а не просто ${project.version} позволяет релизу быть включенным в название.

И noarch Классификатор получает это имя.

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