我可以使用Maven配置文件中的变量作为带有RPM插件的postinstallScriptlet的参数吗?

时间:2016-10-31 19:51:29

标签: shell maven rpm rpm-maven-plugin

我正在更新一些最初使用spec文件完成的RPM以使用Maven RPM插件。原始设置相当复杂,但包括一个“共同”项目,由其他四个项目使用。 spec文件位于该公共项目中,以及使用参数指定某些内容的shell脚本(例如,在创建文件夹名称时区分项目A和项目B)。我想创建处理传递给shell脚本的参数的配置文件。如果我不需要,那些脚本会处理许多我不想重做的事情。有没有办法使用我在配置文件中设置的值作为shell脚本参数,前提是我使用该shell脚本(最低限度修改)作为postInstallScriptlet。

这完全在Linux(Centos 6)上。

因此,配置文件看起来像这样:

<profile>
   <id>beta</id>
   <properties>
      <ENVIRONMENT>Beta</ENVIRONMENT>
      <INSTALL_DIR>/var/ProjA</INSTALL_DIR>
   </properties>
</profile>

脚本文件将具有以下内容:

ENVIRONMENT=$1
INSTALL_DIR=$2

我怎样才能让这两件事一起工作?

1 个答案:

答案 0 :(得分:1)

经过进一步的狩猎和实验,我已经能够解决这个问题了。有两个问题描述了如何在更高层次上做到这一点。在链接下方,我将展示我的所作所为,希望能够成为一个有用的例子。

does-an-external-script-in-rpm-maven-plugin-have-access-to-maven-properties

using-maven-rpm-plugin-how-do-i-to-replace-text-in-files-similar-to-the-assembly

插件部分是:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-resources-plugin</artifactId>
   <version>3.0.1</version>
   <executions>
      <execution>
         <id>copy-resources</id>
         <phase>validate</phase>
         <goals>
            <goal>copy-resources</goal>
         </goals>
         <configuration>
            <outputDirectory>${basedir}/bin</outputDirectory>
            <resources>
               <resource>
                  <!-- note that this will process all files in this directory -->                  
                  <directory>trunk/rpm_scripts/resources</directory>
                  <filtering>true</filtering>
               </resources>
         </configuration>
      </execution>
   </executions>
</plugin>

然后,在个人资料中:

<profile>
   <id>beta</id>
   <properties>
      <VERSION>5.0.0</VERSION>
      <MODULE>Project A</MODULE>
      <!-- and more -->
   </properties>
</profile>

在postinstallScriptlet文件中:

VERSION=${VERSION}
MODULE=${MODULE}

这导致文件被复制到$ {basedir} / bin目录中,并且所有变量都被替换。这正是我所需要的,所以我希望这有助于其他人。