【问题标题】:How to setup maven parent pom to build an rpm from child rpms如何设置 maven 父 pom 以从子 rpm 构建 rpm
【发布时间】:2015-06-06 20:38:45
【问题描述】:

我有一个包含多个 pom 层的微服务项目。我已经设置为使用 'org.codehaus.mojo:rpm-maven-plugin:2.1.1' 插件为每个服务生成 rpm。我需要将其设置为生成一个 rpm,并将所有这些 rpm 作为所需的依赖项。

在父 pom 中,我添加了没有源但需要两个 rpm 包的设置。当我向父级添加相同的设置时,它失败了,我不明白我错过了什么。

例如: 项目组 --ProjectCommon --项目1 --项目2

因此,ProjectCommon、Project1 和 Project2 都生成了自己的 rpm,并与它们的 pom 和 war 一起部署到我们的存储库中。 Project1 和 Project2 需要通用且有效。我想做的是将相同的内容放在父 pom 中,这样它将构建一个需要子级的 rpm。然后,不必安装每个 rpm,我可以安装 1 个父 rpm,它将拉/安装所有其他 rpm。

我应该补充一点,在这一层之上有两层父 pom,因为我们将服务分为业务服务和数据访问服务。然后还将服务与其他组件(如具有自己的 pom 的 gui/etc)组合在一起。但是,如果我让它与直接父母 pom 一起使用,那么它也应该适用于他们的父母。

这是我添加到父 pom 中的内容:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>rpm-maven-plugin</artifactId>
        <version>2.1.1</version>
        <executions>
            <execution>
                <id>attach-rpm</id>
                <goals>
                    <goal>attached-rpm</goal>
                </goals>
                <configuration>
                    <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
                    <group>${rpm.group}</group>
                    <requires>
                        <require>project1 &gt; ${project.version}</require>
                        <require>project2 &gt; ${project.version}</require>
                    </requires>
                    <mappings>
                        <mapping>
                            <directory>${rpm.directory}</directory>
                            <filemode>$rpm.permissions}</filemode>
                            <username>${rpm.user}</username>
                            <groupname>${rpm.usergroup}</groupname>
                        </mapping>
                    </mappings>
                </configuration>
            </execution>
        </executions>
    </plugin>

这是其中一个孩子:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>rpm-maven-plugin</artifactId>
        <version>2.1.1</version>
        <executions>
            <execution>
                <id>attach-rpm</id>
                <goals>
                    <goal>attached-rpm</goal>
                </goals>
                <configuration>
                    <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
                    <group>${rpm.group}</group>
                    <requires>
                        <require>weblogic</require>
                        <require>project1 &gt; ${project.version}</require>
                    </requires>

                    <mappings>
                        <mapping>
                            <directory>${rpm.directory}/config</directory>
                            <filemode>$rpm.permissions}</filemode>
                            <username>${rpm.user}</username>
                            <groupname>${rpm.usergroup}</groupname>
                            <sources>
                                <source>
                                    <location>${project.build.directory}/${project.build.finalName}.${project.packaging}</location>
                                </source>
                            </sources>
                        </mapping>
                    </mappings>
                </configuration>
            </execution>
        </executions>
    </plugin>

这是错误:

[错误] 无法在项目 project-business-parent 上执行目标 org.codehaus.mojo:rpm-maven-plugin:2.1.1:attached-rpm (attach-rpm):RPM 构建执行返回:'1'执行 '/bin/sh -c cd '/workspace/project-pom/services/business/target/rpm/project-business-parent/SPECS' && 'rpmbuild' '-bb' '--target' 'noarch-pc -linux' '--buildroot' '/workspace/project-pom/services/business/target/rpm/project-business-parent/buildroot' '--define' '_topdir /workspace/project-pom/services/business/目标/rpm/project-business-parent' 'project-business-parent.spec'' -> [帮助 1] org.apache.maven.lifecycle.LifecycleExecutionException: 未能执行目标 org.codehaus.mojo:rpm-maven-plugin:2.1.1:attached-rpm (attach-rpm) on project-business-parent: RPM 构建执行返回: '1' 执行 '/bin/sh -c cd '/workspace/project-pom/services/business/target/rpm/project-business-parent/SPECS' && 'rpmbuild' '-bb' '--target' 'noarch-pc-linux' '--buildroot' '/workspace/project-pom/services/business/target/rpm/project-business-parent/buildroot' '--define' '_topdir /workspace/project-pom/服务/业务/目标/rpm/project-business-parent''project-business-parent.spec'' 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317) 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152) 在 org.apache.maven.cli.MavenCli.execute(MavenCli.java:555) 在 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:158) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 在 org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 引起:org.apache.maven.plugin.MojoExecutionException:RPM 构建执行返回:'1'正在执行'/bin/sh -c cd'/workspace/project-pom/services/business/target/rpm/project-business- parent/SPECS' && 'rpmbuild' '-bb' '--target' 'noarch-pc-linux' '--buildroot' '/workspace/project-pom/services/business/target/rpm/project-business-parent /buildroot' '--define' '_topdir /workspace/project-pom/services/business/target/rpm/project-business-parent' 'project-business-parent.spec'' 在 org.codehaus.mojo.rpm.RPMHelper.buildPackage(RPMHelper.java:149) 在 org.codehaus.mojo.rpm.AbstractRPMMojo.execute(AbstractRPMMojo.java:633) 在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) ... 19 更多

编辑:使用“mvn -X install”添加了更详细的错误。谢谢 jdevelop!

【问题讨论】:

  • 请发布“mvn -X ...”的输出,这将提供有关为什么无法启动该 shell 脚本的更多信息。

标签: maven rpm parent-pom


【解决方案1】:

最后注意到 $rpm.permissions} 缺少 { 字符。哦!

更改为 ${rpm.permissions} 一切正常!

【讨论】:

    猜你喜欢
    • 2015-11-18
    • 2013-01-08
    • 2016-11-06
    • 2016-11-06
    • 1970-01-01
    • 2012-08-31
    • 2014-10-21
    • 1970-01-01
    • 2023-02-21
    相关资源
    最近更新 更多