使用 maven 的 RPM 包

ant*_*n91 4 java unix rpm maven 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>
Run Code Online (Sandbox Code Playgroud)

小智 5

这个问题的唯一答案基本上是说“如果 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 中添加来自 Overriding the Default Lifecycle 的内容。在角色提示下设置打包类型的名称,以及包含要绑定的目标坐标的阶段集(省略版本)。可以使用逗号分隔列表将多个目标与一个阶段相关联。

以此为起点,我搜索了“plexus”并发现它是一个 IoC(控制反转)组件框架。有点像 Spring(阅读 Martin Fowler 的 IoC 文章)它有助于“依赖注入”,也就是说它使 Java 在运行时 jar 和类文件识别和加载方面更加灵活,特别是如果类的名称等细节要在运行时在 XML 文件中配置(例如)。这是 Python 和 Ruby 真正不必担心的事情,因为它们不像 Java 那样关心在编译时了解所有内容。plexus/components.xml 就是这样一个文件。了解 Maven 插件是一个 plexus 组件也有帮助 - 也就是说,它是一个要注入的依赖项 - 在这种情况下,依赖项是一个 jar,这是一个充满类文件的 zip 文件 - 类文件描述了“java 对象”或“普通的旧 java 对象”,也称为 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 作为主要工件

提交人:Brett Okken Carlos Sanchez 于 2009 年 1 月 2 日提交

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>
++-------+
Run Code Online (Sandbox Code Playgroud)

整个文档文件是:

github.com - rpm-maven-plugin - usage.apt

由于我很好奇,我查了一下“apt markup”——

www.beaglebytes.com - created-a-document-using-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 使用段落缩进。

希望这可以帮助

布莱恩·芬内尔