java - 使用 maven 的 RPM 包

标签 java maven unix rpm rpm-maven-plugin

我正在尝试使用 maven 插件构建一个 RPM 包。

如果我添加插件配置,则未制作 RPM 包,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>

最佳答案

这个问题的唯一答案基本上是说“如果 rpm 的打包出现错误,请不要使用它”。我遇到了完全相同的事情,所以我会尝试更多地阐明这个问题。

有人曾经说过“maven 不烂,但是 maven 文档可以”

这是我发现的 -

首先...默认包装类型不是您可以在 Maven 中使用的唯一包装类型,如下所述:

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

要为新的打包类型定义新的生命周期,您需要在 Plexus 中配置 LifecycleMapping 组件。在您的插件项目中,在 src/main/resources 下创建一个 META-INF/plexus/components.xml。在 components.xml 中添加来自覆盖默认生命周期的内容。在角色提示下设置包装类型的名称,以及包含要绑定(bind)的目标坐标的阶段集(省略版本)。多个目标可以使用逗号分隔列表与一个阶段相关联。

以此为起点,我搜索了“plexus”,发现这是一个 IoC(控制反转)组件框架。有点像 Spring(阅读 Martin Fowler 的 IoC 文章),它有助于“依赖注入(inject)”,也就是说,它使 java 在运行时 jar 和类文件识别和加载方面更加灵活,特别是如果类名称等细节是在运行时在 XML 文件中配置(例如)。这是 Python 和 Ruby 真正不必担心的事情,因为它们不像 Java 那样关心在编译时了解所有内容。 plexus/components.xml 就是这样一个文件。此外,它有助于了解 Maven 插件是一个 plexus 组件——也就是说,它是一个要注入(inject)的依赖项——在这种情况下,依赖项是一个 jar,它是一个包含类文件的 zip 文件——一个类文件描述了一个“java object”或“plain old java object”也称为 POJO。 Maven 使用的 POJO 是 MOJO——所以所有 Maven 插件都是 MOJO——处理 Maven 插件插入的东西是 Plexus(至少在 Maven 2 中)。因此,让我们搜索插件源代码,看看它们是否有一个带有“角色提示”rpm 的 components.xml 文件。

......他们确实......(“使用来源,卢克”)

我们还可以使用 gihub 的 GIT Blame 功能来查看谁记录了添加“角色提示”时的内容以及同时更改了哪些其他文件。

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

[MOJO-1249] 创建 rpm 作为主要 Artifact

提交人:布雷特·奥肯
Carlos Sanchez 于 2009 年 1 月 2 日 promise

github.com - rpm-maven-plugin - 提交 - fb9bc1ae7488dc0fa6853cdd874fc907c628122d

3个文件同时更改:

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

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

src/site/apt/usage.apt

usage.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 - usage.apt

由于我很好奇,我查找了“apt markup”-

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 使用段落缩进。

希望这可以帮助

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

关于java - 使用 maven 的 RPM 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230324/

相关文章:

linux - 如何在文本文件unix中显示包含特定字符串的第一行?

java - 绘制/布局期间的对象分配?

android - 是否可以从Android资源xml文件读取gradle变量?

java - 如何在maven jar中包含依赖jar

java - 如何通过 Java 代码访问配置文件(在 pom.xml 中)中设置的值

bash - 使用 UNIX 批量重命名文件 - 我应该使用 awk 吗?

linux - 消息 "shutdown via gdm"是什么意思?

java - HAProxy应用服务器响应其他端口

java - JAX-RS boolean 值与整数

java - 具有依赖关系(外键)的多个 DAO