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
Классификатор получает это имя.