我正在尝试使用 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/