RPM-пакет с использованием Maven

Я пытаюсь собрать RPM-пакет, используя плагин maven.

Если я добавлю конфигурацию плагина, пакет RPM не будет создан, руководство на сайте плагина RPM говорит, что тег пакета должен быть RPM, однако это может привести к сбою сборки, сообщив, что это назначение действительно.

У кого-нибудь есть примеры, которыми они могли бы поделиться?

РЕДАКТИРОВАТЬ Ошибка неизвестна упаковка: об / мин

<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>rpm</packaging>

<profile>
            <id>local</id>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources/properties/dev</directory>
                    </resource>
                    <resource>
                        <directory>src/main/resources/txt</directory>
                    </resource>
                    <resource>
                        <directory>src/main/resources/universal</directory>
                    </resource>
                </resources>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>rpm-maven-plugin</artifactId>
                        <version>2.1-alpha-3</version>
                        <extensions>true</extensions>
                        <executions>
                            <execution>
                                <id>generate-rpm</id>
                                <goals><goal>rpm</goal></goals>
                                <phase>prepare-package</phase>
                            </execution>
                        </executions>
                        <configuration>
                            <summary>...</summary>
                            <name>...</name>
                            <version>...</version>
                            <release>...</release>
                            <vendor>...</vendor>
                            <packager>...</packager>
                            <group>Application</group>
                            <mappings>
                                <mapping>
                                    <directory>/tmp/testing</directory>
                                </mapping>
                            </mappings>
                            <!--<requires>filesystem, bash, grep</requires>-->

                            <description>
                                ...
                            </description>

                            <prepareScript>RPMScripts/prep.bash</prepareScript>
                            <preinstallScript>RPMScripts/preInstall.bash</preinstallScript>
                            <install>RPMScripts/install.bash</install>
                            <postinstall>RPMScripts/postInstall.bash</postinstall>
                            <cleanScript>RPMScripts/clean.bash</cleanScript>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.1</version>
                        <configuration>
                            <failOnError>true</failOnError>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jar-plugin</artifactId>
                        <version>2.4</version>
                        <configuration>
                            <archive>
                                <manifest>
                                    <addClasspath>true</addClasspath>
                                </manifest>
                            </archive>
                        </configuration>
                    </plugin>
                    <plugin> 
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <version>2.8</version>
                        <executions>
                            <execution>
                                <phase>install</phase>
                                <goals>
                                    <goal>copy-dependencies</goal>
                                </goals>
                                <configuration>
                                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>2.16</version>
                        <configuration>
                            <skipTests>true</skipTests>
                        </configuration>
                    </plugin>

2 ответа

Решение

Ошибка ссылается на строку:

<packaging>rpm</packaging>

Проблема в том, что ваша упаковка на самом деле представляет собой плагин, а не встроенный тип пакета maven. Пропуск строки разрешит ошибку.

Единственные ответы на этот вопрос в основном говорят: "если упаковка rpm дает ошибки, просто не используйте ее". Я сталкиваюсь с тем же самым, поэтому я постараюсь пролить немного света на эту проблему.

Кто-то однажды сказал: "Maven не сосет, но документация Maven делает"

Вот что я нашел -

Во-первых... типы упаковки по умолчанию - не единственные типы упаковки, которые вы можете использовать в maven, как указано здесь:

http://books.sonatype.com/mvnref-book/reference/writing-plugins-sect-plugins-lifecycle.html

Чтобы определить новый жизненный цикл для нового типа упаковки, вам необходимо настроить компонент LifecycleMapping в Plexus. В вашем проекте плагина создайте META-INF/plexus/components.xml в каталоге src/main/resources. В компонент.xml добавьте содержимое из Переопределение жизненного цикла по умолчанию. Задайте имя типа упаковки под ролью-подсказкой и набор этапов, содержащих координаты целей для привязки (не указывайте версию). Несколько целей могут быть связаны с фазой, используя список с разделителями-запятыми.

Используя это в качестве отправной точки, я искал "сплетение" и обнаружил, что это компонентная структура IoC (Inversion of Control). Немного похожий на Spring (см. Статью IoC Мартина Фаулера), он помогает с "внедрением зависимостей", то есть делает java более гибким в отношении идентификации и загрузки jar-файлов времени выполнения и файлов классов, особенно если такие детали, как имя классов, должны быть настраивается во время выполнения в файлах XML (например). Это то, о чем Python и Ruby на самом деле не нужно беспокоиться, потому что они не так озабочены знанием всего во время компиляции, как Java. Plexus / components.xml как раз такой файл. Также полезно знать, что плагин Maven является компонентом сплетения, то есть это зависимость, которую нужно внедрить, - в этом случае эта зависимость представляет собой jar-файл, который представляет собой zip-файл, полный файлов классов - файл классов описывает " Java-объект "или" простой старый Java-объект ", также называемый POJO. POJO для использования в Maven - это MOJO - так что все подключаемые модули Maven - это MOJO - и для подключения подключаемого модуля для Maven используется Plexus (по крайней мере, в Maven 2). Итак, давайте поищем исходный код плагина, чтобы посмотреть, есть ли у него файл component.xml с "подсказкой роли" rpm.

... и они делают... ("использовать источник, Люк")

мы также можем использовать функцию GIT Blame от gihub, чтобы узнать, кто задокументировал, что, когда был добавлен "намек на роль", и какие другие файлы были изменены одновременно.

github.com - rpm-maven-plugin - blame - 0efd27d3beb64c291b960731fe1bdbbb5dbd938e - src / main / resources /META-INF/plexus/components.xml

[MOJO-1249] Создать rpm как основной артефакт

Представлено: Бретт Оккен Карлос Санчес совершил 2 января 2009

github.com - rpm-maven-plugin - commit - fb9bc1ae7488dc0fa6853cdd874fc907c628122d

3 файла, где изменения одновременно:

SRC / Основной / Java/ орг / Codehaus/ мох об / мин /RPMMojo.java

SRC / главная / ресурсы / META-INF / сплетение / components.xml

ЦСИ / сайт / кв /usage.apt

Файл использовании.apt - документация, и эти разделы были добавлены

+
+ The packaging value should be set to "<<<rpm>>>".
++-------+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd ">
+ <modelVersion>4.0.0</modelVersion>
+ ...
+ <packaging>rpm</packaging>
+ ...
+</project>
++-------+
+
+ The extensions tag for this plugin should be marked true.
+
++-------+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>rpm-maven-plugin</artifactId>
+ <extensions>true</extensions>
+ ...
+ </plugin>
+ </plugins>
+ </build>
++-------+

Весь файл документации:

github.com - rpm-maven-plugin - использовании.apt

Так как мне было любопытно, я посмотрел "подходящая разметка"

www.beaglebytes.com - создание документа с использованием apt-v01.html

Почти обычный текст (APT) - очень простой, но мощный язык разметки. Это особенно интересно, поскольку позволяет создавать аккуратно отформатированные HTML, RTF и другие выходные форматы из документа, который выглядит как простой текст. Как сказано в документации:

APTconvert - это инструмент командной строки, который можно использовать для преобразования формата APT в HTML, XHTML, PDF, PostScript, (загружаемый MS Word) RTF, DocBook SGML и DocBook XML.

Формат APT (Почти обычный текст) - это простой язык разметки (например, HTML), который можно использовать для написания простых документов, похожих на статьи (например, HTML). В отличие от HTML, APT использует как можно меньше разметки для выражения структуры документа. Вместо этого APT использует отступ абзаца.

надеюсь это поможет

Бриан Ф Эннелл

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