我可以使用 Maven 配置文件中的变量作为带有 RPM 插件的 postinstallScriptlet 的参数吗?
Can I use a variable in a Maven profile as a parameter for a postinstallScriptlet with the RPM plugin?
我正在更新一些最初使用规范文件完成的 RPM 以使用 Maven RPM 插件。原始设置相当复杂,但包括一个 "common" 项目,该项目被其他四个项目使用。 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=
INSTALL_DIR=
我怎样才能让这两个东西一起工作?
经过进一步的搜索和实验,我已经能够解决这个问题。有两个问题描述了如何在更高层次上做到这一点。在链接下方,我将展示我所做的,希望能成为一个有用的示例。
does-an-external-script-in-rpm-maven-plugin-have-access-to-maven-properties
和
插件部分是:
<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 目录中,并进行了所有变量替换。这正是我所需要的,所以我希望这对其他人有所帮助。
我正在更新一些最初使用规范文件完成的 RPM 以使用 Maven RPM 插件。原始设置相当复杂,但包括一个 "common" 项目,该项目被其他四个项目使用。 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=
INSTALL_DIR=
我怎样才能让这两个东西一起工作?
经过进一步的搜索和实验,我已经能够解决这个问题。有两个问题描述了如何在更高层次上做到这一点。在链接下方,我将展示我所做的,希望能成为一个有用的示例。
does-an-external-script-in-rpm-maven-plugin-have-access-to-maven-properties
和
插件部分是:
<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 目录中,并进行了所有变量替换。这正是我所需要的,所以我希望这对其他人有所帮助。