Maven 3 在Ambari';使用maven构建过程创建的metainfo.xml文件

Maven 3 在Ambari';使用maven构建过程创建的metainfo.xml文件,maven-3,hortonworks-data-platform,ambari,rpm-maven-plugin,Maven 3,Hortonworks Data Platform,Ambari,Rpm Maven Plugin,我不想将我的服务版本硬编码到metainfo.xml中,可以吗 <service> <name>DUMMY_APP</name> <displayName>My Dummy APP</displayName> <comment>This is a distributed app.</comment> <version>0.1</versio

我不想将我的服务版本硬编码到metainfo.xml中,可以吗

    <service>
      <name>DUMMY_APP</name>
      <displayName>My Dummy APP</displayName>
      <comment>This is a distributed app.</comment>
      <version>0.1</version> --------------This I don't want to hardcode, Can I doit?
     <components>
     ...
    </components>
  </service>

虚拟应用程序
我的虚拟应用程序
这是一个分布式应用程序。
0.1------------我不想硬编码,可以吗?
...

我正在使用maven作为构建工具。

这可以通过使用maven的资源过滤来完成。需要三个步骤:

  • 定义将保存版本号的maven属性
  • 在metainfo.xml文件的过滤器标记之间添加maven属性
  • 在pom中注明需要过滤metainfo.xml文件
例如,让我们假设您希望使用与project maven版本标识符相同的版本,
${project.version}
,作为metainfo.xml文件中的版本。您将用
${project.version}
替换
0.1
。然后在pom文件中,您需要将metainfo.xml文件列为需要过滤的文件。此步骤的步骤将根据您绑定自定义Ambari服务(rpm、assembly等)的方式而有所不同。通常,无论您在列出源代码(要包含在捆绑包中的内容)时使用哪个插件,都需要指定metainfo.xml文件的路径,并确保过滤设置为true

现在让我们假设您想要创建一个rpm来安装您的工件。它看起来像这样:

<?xml version="1.0"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<version>0.0.1-SNAPSHOT</version>
<artifactId>com.example.project</artifactId>
<packaging>pom</packaging>

<properties>
    <hdp.name>HDP</hdp.name>
    <hdp.version>2.3</hdp.version>
    <stack.dir.prefix>/var/lib/ambari-server/resources/stacks</stack.dir.prefix>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>rpm-maven-plugin</artifactId>
            <version>2.1.2</version>
            <extensions>true</extensions>
            <executions>
                <execution>
                    <id>generate-hdp-rpm</id>
                    <phase>package</phase>
                    <goals>
                        <goal>attached-rpm</goal>
                    </goals>
                    <configuration>
                        <classifier>hdp</classifier>
                        <needarch>true</needarch>
                        <sourceEncoding>UTF-8</sourceEncoding>
                        <distribution>blah</distribution>
                        <group>something/Services</group>
                        <packager>company</packager>
                        <vendor>company</vendor>
                        <name>SERVICENAME-ambari-hdp</name>
                        <defineStatements>
                            <!-- I use the below line to prevent compiled python scripts from failing the build -->
                            <defineStatement>_unpackaged_files_terminate_build 0</defineStatement>
                            <defineStatement>platform_stack_directory ${stack.dir.prefix}/${hdp.name}/${hdp.version}</defineStatement>
                        </defineStatements>
                        <requires>
                            <require>ambari-server</require>
                        </requires>
                        <mappings>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME</directory>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                            </mapping>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME</directory>
                                <directoryIncluded>false</directoryIncluded>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                                <sources>
                                    <source>
                                        <location>src/main/resources/metainfo.xml</location>
                                        <filter>true</filter>
                                    </source>
                                </sources>
                            </mapping>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/configuration</directory>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                            </mapping>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/configuration</directory>
                                <directoryIncluded>false</directoryIncluded>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                                <sources>
                                    <source>
                                        <location>src/main/resources/configuration</location>
                                    </source>
                                </sources>
                            </mapping>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/package</directory>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                            </mapping>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/package/scripts</directory>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                            </mapping>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/package/scripts</directory>
                                <directoryIncluded>false</directoryIncluded>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                                <sources>
                                    <source>
                                        <location>src/main/resources/scripts</location>
                                    </source>
                                </sources>
                            </mapping>
                        </mappings>
                    </configuration>
                </execution>
                <!-- You may have multiple executions if you want to create rpms for stacks other then HDP -->
            </executions>
        </plugin>
    </plugins>
</build>
<dependencies>
    <!-- List any dependencies you need -->
</dependencies>
您的项目结构应如下所示:

--src
  --main
    --resources
      --configuration
      --scripts
      metainfo.xml
您的pom文件如下所示:

<?xml version="1.0"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<version>0.0.1-SNAPSHOT</version>
<artifactId>com.example.project</artifactId>
<packaging>pom</packaging>

<properties>
    <hdp.name>HDP</hdp.name>
    <hdp.version>2.3</hdp.version>
    <stack.dir.prefix>/var/lib/ambari-server/resources/stacks</stack.dir.prefix>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>rpm-maven-plugin</artifactId>
            <version>2.1.2</version>
            <extensions>true</extensions>
            <executions>
                <execution>
                    <id>generate-hdp-rpm</id>
                    <phase>package</phase>
                    <goals>
                        <goal>attached-rpm</goal>
                    </goals>
                    <configuration>
                        <classifier>hdp</classifier>
                        <needarch>true</needarch>
                        <sourceEncoding>UTF-8</sourceEncoding>
                        <distribution>blah</distribution>
                        <group>something/Services</group>
                        <packager>company</packager>
                        <vendor>company</vendor>
                        <name>SERVICENAME-ambari-hdp</name>
                        <defineStatements>
                            <!-- I use the below line to prevent compiled python scripts from failing the build -->
                            <defineStatement>_unpackaged_files_terminate_build 0</defineStatement>
                            <defineStatement>platform_stack_directory ${stack.dir.prefix}/${hdp.name}/${hdp.version}</defineStatement>
                        </defineStatements>
                        <requires>
                            <require>ambari-server</require>
                        </requires>
                        <mappings>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME</directory>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                            </mapping>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME</directory>
                                <directoryIncluded>false</directoryIncluded>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                                <sources>
                                    <source>
                                        <location>src/main/resources/metainfo.xml</location>
                                        <filter>true</filter>
                                    </source>
                                </sources>
                            </mapping>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/configuration</directory>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                            </mapping>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/configuration</directory>
                                <directoryIncluded>false</directoryIncluded>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                                <sources>
                                    <source>
                                        <location>src/main/resources/configuration</location>
                                    </source>
                                </sources>
                            </mapping>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/package</directory>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                            </mapping>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/package/scripts</directory>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                            </mapping>
                            <mapping>
                                <directory>${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/package/scripts</directory>
                                <directoryIncluded>false</directoryIncluded>
                                <filemode>755</filemode>
                                <username>root</username>
                                <groupname>root</groupname>
                                <sources>
                                    <source>
                                        <location>src/main/resources/scripts</location>
                                    </source>
                                </sources>
                            </mapping>
                        </mappings>
                    </configuration>
                </execution>
                <!-- You may have multiple executions if you want to create rpms for stacks other then HDP -->
            </executions>
        </plugin>
    </plugins>
</build>
<dependencies>
    <!-- List any dependencies you need -->
</dependencies>

4.0.0
com.example
0.0.1-快照
com.example.project
聚甲醛
HDP
2.3
/var/lib/ambari服务器/resources/stacks
org.codehaus.mojo
rpm maven插件
2.1.2
真的
生成hdp rpm
包裹
附加转速
hdp
真的
UTF-8
废话
某物/服务
公司
公司
SERVICENAME ambari hdp
_未打包的\u文件\u终止\u生成0
平台栈目录${stack.dir.prefix}/${hdp.name}/${hdp.version}
安巴里服务器
${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME
755
根
根
${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME
假的
755
根
根
src/main/resources/metainfo.xml
真的
${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/configuration
755
根
根
${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/configuration
假的
755
根
根
src/main/resources/configuration
${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/package
755
根
根
${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/package/scripts
755
根
根
${stack.dir.prefix}/${hdp.name}/${hdp.version}/services/SERVICENAME/package/scripts
假的
755
根
根
src/main/resources/scripts

这将创建一个rpm,安装后将把您的服务添加到HDP2.3堆栈中。安装rpm后,您必须重新启动ambari服务器,以确保获取新的服务定义

更新: 要为其他堆栈创建其他RPM,您需要:

  • 在pom的rpm maven插件部分复制执行块
  • 将新执行的id元素更改为唯一
  • 修改