Пакет RPM с использованием maven


Я пытаюсь построить RPM-пакет с помощью плагина maven.

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

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

EDIT Ошибка неизвестна упаковка: 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 2

2 ответа:

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

<packaging>rpm</packaging>

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

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

Кто-то однажды сказал: "maven не сосет, но Maven documentation делает"

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

Во-первых... типы упаковки по умолчанию не являются единственными типами упаковки, которые можно использовать в 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 добавляет содержимое из переопределения жизненного цикла по умолчанию. Задайте имя типа упаковки в разделе role-hint и набор фаз, содержащих координаты целей привязать (опустить версию). Несколько целей могут быть связаны с фазой с помощью списка, разделенного запятыми.

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

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

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

Github.com - РПМ-Maven-плагина - виноват - 0efd27d3beb64c291b960731fe1bdbbb5dbd938e - src/главная/ресурсы/мета-инф/сплетения/компоненты.xml

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

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

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

3 файла, в которых изменения происходят одновременно время:

Src / main / java / org / codehaus/mojo/rpm / RPMMojo.java

Src/main/resources/META-INF/plexus/components.xml

Src / site / apt / 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-плагин-использование.apt

Поскольку мне было любопытно, я посмотрел "apt markup" -

Www.beaglebytes.com -создание-документа-с помощью-apt-v01.html

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

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

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

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

B r i a n F e n n e l l