我正在使用rpm-maven-plugin为我的应用程序创建一个安装/升级RPM,它将安装在CentOS 7上。
对于新安装,需要一些软件包,但是rpm-maven-plugin会忽略rpm.spec文件中的设置(因此'Requires:'将不起作用),并且无法通过RPM执行yum或rpm脚本。
插件是否有配置告诉RPM安装所需的软件包(在这种情况下为PostgresDB和sshpass)?
如果没有,最好的选择是什么?告诉客户在安装RPM之前先手动安装需求,还是创建可处理完整设置的Shell脚本?
这是pom.xml的相关部分:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>rpm-maven-plugin</artifactId>
<version>${rpm-maven-plugin.version}</version>
<inherited>false</inherited>
<executions>
<execution>
<inherited>false</inherited>
<phase>install</phase>
<goals>
<goal>rpm</goal>
</goals>
</execution>
</executions>
<configuration>
<license>Commercial</license>
<group>Networking/Admin</group>
<name>name</name>
<packager>packager</packager>
<prefix>$prefix</prefix>
<version>${project.version}</version>
<release>release</release>
<needarch>x86_64</needarch>
<mappings>
...
</mappings>
<requires>
<require>postgresql >= ${rpm.postgresql.version}</require>
<require>java-1.8.0-openjdk</require>
<require>sshpass</require>
</requires>
<postinstallScriptlet>
<script>
cd /opt/%{name}
if [ "$1" = 1 ] ; then
if [ -e ./install.sh ]; then
sh ./install.sh;
fi
fi
if [ "$1" = 2 ] ; then
sh ./upgrade.sh
fi
</script>
</postinstallScriptlet>
</configuration>
</plugin>
</plugins>
</build>
答案 0 :(得分:0)
今天遇到这个问题。找到的解决方案,没有很好地记录在案。基本上需要以LinkedHashSet的形式传递需求列表。
根据maven-rpm-plugin documentation的要求
需要:
此软件包的要求列表。
类型:java.util.LinkedHashSet
必填:否
所以改变
PS1='[random-text]'
到
<requires>
<require>postgresql >= ${rpm.postgresql.version} </require>
<require>java-1.8.0-openjdk</require>
<require>sshpass</require>
</requires>
假设$ {rpm.postgresql.version} = 123,则最终规范的行如下所示:
<requires>
<LinkedHashSet>postgresql >= ${rpm.postgresql.version},java-1.8.0-openjdk,sshpass</LinkedHashSet>
</requires>