rpmbuild的自定义gradle任务 [英] Custom gradle task for rpmbuild

查看:137
本文介绍了rpmbuild的自定义gradle任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们目前正在从scons转移到gradle以构建我们软件的Java部分。我们需要的一件事是从spec文件构建rpm。所以我们试图编写自定义任务来执行rpmbuild以从spec文件构建rpm。代码归结为:

  def rpmPath ='sample-master-5.0-128000-final.x86_64.rpm'
def rpmArgs = ['--quiet','-bb','SPECS / sample-rpm-spec.spec','--define'rpmdir artifacts'','--definesourcedir。', '--define'version 5.0'','--define'targetdir build'','--define'name sample'','--define'pathname sample'','--definearch x86_64', '--define'revision 128000'','--define'branchName master'']
project.exec {
workingDir'。'
commandLine'rpmbuild'
args rpmArgs
}

这里是规格文件:

 #--define'rpmdir dir'指定rpm目标目录
# - 定义'version xyz'来定义构建版本
#--define'sourcedir dir'指定源目录的位置

%define _builddir。
%define _rpmdir%{?rpmdir}%{!? rpmdir:RPMS}
%define _rpmfilename%{pathname} - %% {VERSION} - %% {RELEASE}%{?final}%{ !?final:%{nil}}。%% {ARCH} .rpm

定义xyzapp / opt / xyzapp

摘要:示例规范文件
名称:%{name}
版本:%{版本}

版本:%{revision}
许可证:Commercial
Group:Applications / Imaging
Vendor :Sample Company Inc.
BuildRoot:%{_ tmppath} /%{pathname} -buildroot
BuildArchitectures:%{arch}

要求:first-rpm%{?branchName: - %{branchName}}%{!? branchName:}> = 2.10.0
要求:second-rpm%{?branchName: - %{branchName}}%{!? branchName:}> = 2.10 .0

%description
示例规范说明

%build

使用rpmdir =%{_ rpmdir} version =%{版本} sourcedir =%{sourcedir}

#确保构建根目录是干净的
if [%{buildroot}!=/];然后
rm -rf%{buildroot}
fi

mkdir -p%{_ rpmdir}
mkdir -p%{buildroot} / tmp / classes
mkdir -p%{buildroot}%{xyzapp}
mkdir -p%{buildroot}%{xyzapp} / webapp / WEB-INF / lib /

if [-f%{ targetdir} /distributions/SampleZipArtifact.zip];然后
unzip%{targetdir} /distributions/SampleZipArtifact.zip -d%{buildroot}%{xyzapp} /
fi

#删除不应包含的服务器类使用这个插件
rm -rf%{buildroot} / tmp

find%{buildroot} -name .svn -o -name .classpath -o -name .project | xargs rm -rf

%clean

if [%{buildroot}!=/];然后
rm -rf%{buildroot}
fi

%pre

%post

%preun

%postun

%文件

%defattr( - ,xyzapp,users, - )
%doc

本质上,通过执行gradle buildSampleRpm
我们得到了这样的错误:

[错误] [system.err]错误:找不到兼容的构建体系结构

以下是完整的调试日志给你更多的细节:

  14:23:16.462 [调试] [org.gradle.api.internal.tasks .execution.ExecuteActionsTaskExecuter]执行任务':buildSampleRpm'的操作。 
14:23:16.490 [INFO] [org.gradle.process.internal.DefaultExecHandle]启动进程'command'rpmbuild''。工作目录:/ mnt / hgfs / CSI / GradleRpmSample命令:rpmbuild --quiet -bb SPECS / sample-rpm-spec.spec --definerpmdir artifacts--definesourcedir。 - 定义版本5.0 - 定义targetdir。 --definename sample--definepathname sample--definearch x86_64--definerevision 128000--definebranchName master
14:23:16.490 [DEBUG] [org。进程'命令'rpmbuild''的环境:{TERM = xterm,JAVA_HOME = / usr / lib / jvm / java,FLEX_SDK = 4.11,SESSION_MANAGER = local / unix:@ / tmp / .ICE -unix / 2695,unix / unix:/tmp/.ICE-unix/2695,GNOME_DESKTOP_SESSION_ID =这是不赞成的,MAIL = / var / spool / mail / trungvo,GDMSESSION = gnome,XDG_SESSION_COOKIE = 51806fc4a6f192828593c2df00000009-1428348402.461525-264542834, PWD = / mnt / hgfs / CSI / GradleRpmSample,HOSTNAME = tonycsicentos6,CVS_RSH = ssh,GIO_LAUNCHED_DESKTOP_FILE_PID = 16285,G_BROKEN_FILENAMES = 1,NLSPATH = / usr / dt / lib / nls / msg /%L /%N.cat,GNOME_KEYRING_SOCKET = / tmp / keyring-LiVncy / socket,CSI_DATA = / mnt / hgfs / CSI / Data / trunk,GDM_KEYBOARD_LAYOUT = us,HISTSIZE = 1000,EDITOR = vi,PATH = / mnt / hgfs / CSI / Library / rhel5-64 / ant /bin:/mnt/hgfs/CSI/Library/rhel5-64/Tools/flex_sdk_4.11/bin:/home/trungvo/gradle-2.3/斌:到/ mnt / HGFS / CSI /库/ rhel5-64 /蚂蚁/斌:/mnt/hgfs/CSI/Library/rhel5-64/Tools/flex_sdk_4.11/bin:/home/trungvo/gradle-2.3/bin :/usr/lib64/qt-3.3/bin:在/ usr / local / bin目录:在/ usr / bin中:/ bin中:在/ usr / local / sbin中:/ usr / sbin目录:/ sbin目录:/opt/apache-ant-1.8 .1 / bin:/ home / trungvo / bin:/opt/apache-ant-1.8.1/bin,GRADLE_HOME = / home / trungvo / gradle-2.3,QTLIB = / usr / lib64 / qt-3.3 / lib,GDCM_DATA_ROOT = / mnt / hgfs / CSI / Data / trunk / CSI / Rendering / gdcmData,GDM_LANG = en_US.utf8,XAUTHORITY = / var / run / gdm / auth-for-trungvo-dyz7I2 / database,WINDOWPATH = 1,FLEX_HOME = / mnt / hgfs / CSI / Library / rhel5-64 / Tools / flex_sdk_4.11,USERNAME = trungvo,SSH_ASKPASS = / usr / libexec / openssh / gnome -ssh-askpass,SHLVL = 2,XFILESEARCHPATH = / usr / dt /默认值/%L / Dt,COLORTERM = gnome-terminal,CSI_LIB64 = / mnt / hgfs / CSI / Library / rhel5-64,GIO_LAUNCHED_DESKTOP_FILE = / usr / share / applications / gnome-terminal.desktop,WINDOWID = 44040195,LOGNAME = trungvo ,QTDIR = / usr / lib64 / qt-3.3,SSH_AUTH_SOCK = / tmp / keyring-LiVncy / socket.ssh,OLDPWD = / home / trungvo / gradle-2.3,LIBGL_DRIVERS_PATH = / usr / loca l / lib / gallium,DBUS_SESSION_BUS_ADDRESS = unix:abstract = / tmp / dbus-9FkHHSyF0Z,guid = 7c6139ab66bf88999c60bf4d0000013e,SHELL = / bin / bash,GNOME_KEYRING_PID = 2685,GTK_RC_FILES = / etc / gtk / gtkrc:/home/trungvo/.gtkrc -1.2-gnome2,DESKTOP_SESSION = gnome,FLEX_HOME_4 = / mnt / hgfs / CSI / Library / rhel5-64 / Tools / flex_sdk_4.11,QTINC = / usr / lib64 / qt-3.3 / include,DISPLAY = 0.0,USER = trungvo,ANT_HOME = / mnt / hgfs / CSI / Library / rhel5-64 / ant,GRADLE_OPTS = -Dorg.gradle.native = false,MESA_GLSL = opt,nopvert,nopfrag,HOME = / home / trungvo,HISTCONTROL = ignoredups,LESSOPEN = | /usr/bin/lesspipe.sh%s,MALLOC_TRIM_THRESHOLD_ = 128 * 1024,LS_COLORS = rs = 0:di = 01; 34:ln = 01; 36:mh = 00:pi = 40; 33:so = 01 ; 35:DO = 01; 35:BD = 40; 33; 01:CD = 40; 33; 01:或= 40; 31; 01:MI = 01; 05; 37; 41:SU = 37; 41:SG = 30; 43:CA = 30; 41:TW = 30; 42:流量= 34; 42:ST = 37; 44:前= 01; 32:*焦油= 01; 31:*的tgz = 01; 31。 :* ARJ = 01; 31:* TAZ = 01; 31:* LZH = 01; 31:* LZMA = 01; 31:* TLZ = 01; 31:* TXZ = 01; 31:*的.zip = 01; 31:* Z = 01; 31:* Z = 01; 31:* DZ = 01; 31:* GZ = 01; 31:* LZ = 01; 31:* XZ。 = 01; 31:* BZ2 = 01; 31:* TBZ = 01; 31:* tbz2 = 01; 31:* BZ = 01; 31:* TZ = 01;。 31:* DEB = 01; 31:* RPM = 01; 31:*罐= 01; 31:* RAR = 01; 31:* ACE = 01; 31:*动物园= 01; 31: * .cpio = 01; 31:* 7Z = 01; 31:* RZ = 01; 31:* JPG = 01; 35:* JPEG = 01; 35:* GIF = 01; 35:*。 BMP = 01; 35:* PBM = 01; 35:* PGM = 01; 35:* PPM = 01; 35:* TGA = 01; 35:* XBM = 01; 35:* XPM = 01; 35:* TIF = 01; 35:* TIFF = 01; 35:* PNG = 01; 35:* SVG = 01; 35:* SVGZ = 01; 35:* MNG = 01;。 35:* PCX = 01; 35:* MOV = 01; 35:* MPG = 01; 35:* MPEG = 01; 35:* m2v格式= 01; 35:* MKV = 01; 35: * .ogm = 01; 35:* MP4 = 01; 35:* M4V = 01; 35:* MP4V = 01; 35:* VOB = 01; 35:* QT = 01; 35:*。 NUV = 01; 35:* WMV = 01; 35:* ASF = 01; 35:* RM = 01; 35:* RMVB = 01; 35:* FLC = 01; 35:* AVI = 01; 35:* FLI = 01; 35:* FLV = 01; 35:* GL = 01; 35:* DL = 01; 35:* XCF = 01; 35:* XWD = 01;。 35:* YUV = 01; 35:* CGM = 01; 35:*电动势= 01; 35:* AXV = 01; 35:* ANX = 01; 35:* OGV = 01; 35: * .ogx = 01; 35:* AAC = 01; 36:* AU = 01; 36:*后手= 01; 36:*中期= 01; 36:* MIDI = 01; 36:*。 MKA = 01; 36:* MP3 = 01; 36:* MPC = 01; 36:* OGG = 01; 36:* RA = 01; 36:* WAV = 01; 36:* AXA = 01; 36:*。oga = 01; 36:*。spx = 01; 36:*。xspf = 01; 36 :, ORBIT_SOCKETDIR = / tmp / orbit-trungvo,LANG = en_US.utf8}
14: 23:16.499 [调试] [org.gradle.process.internal.DefaultExecHandle] Ch老化状态为:开始
14:23:16.506 [调试] [org.gradle.process.internal.DefaultExecHandle]等待进程启动:命令'rpmbuild'。
14:23:16.516 [DEBUG] [org.gradle.process.internal.DefaultExecHandle]将状态更改为:STARTED
14:23:16.517 [DEBUG] [org.gradle.process.internal.ExecHandleRunner ]等待流处理...
14:23:16.517 [INFO] [org.gradle.process.internal.DefaultExecHandle]成功启动进程'command'rpmbuild''
14:23:16.545 [错误] [system.err]错误:找不到兼容体系结构
14:23:16.569 [DEBUG] [org.gradle.process.internal.DefaultExecHandle]将状态更改为:FAILED
14: 23:16.569 [DEBUG] [org.gradle.process.internal.DefaultExecHandle]进程'command'rpmbuild''以退出值1结束(状态:FAILED)
14:23:16.570 [调试] [org.gradle .api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter]已完成执行任务':buildSampleRpm'
14:23:16.571 [LIFECYCLE] [class org.gradle.TaskExecutionLogger]:buildSampleRpm FAILED




  • 我们错过了传递给Archit请注意,我们确实通过了--define'arch x86_64'

  • 我们尝试传入选项 - -buildarch x86_64,但显然,它是我们版本的rpmbuild的未知选项

  • 如果我们直接从终端执行rpmbuild命令,它可以正常工作,但是,只要我们执行在gradle shell中的rpmbuild,事情开始中断。这使我认为我们错过了将某些配置传递给Gradle.project.exec

  • 您可以从这里下载完整的示例源代码:
    https://dl.dropboxusercontent.com/u/59660821/GradleRpmSample.zip

  • 我在Centos 6.4上运行gradle

  • 但是,我考虑使用nebula.os-package,根据他们的API,他们使用Gradle DSL构建rpm包。它不提供给我们从spec文件构建rpm包的方法。我们有大量的spec文件,将spec文件逻辑转换为Gradle DSL目前不是我们的选择。

  • 我环顾四周,显然scons / python是从spec文件构建rpm包,所以我试图使用gradle来驱动scons以使用rpmbuild命令从spec文件构建rpm

  • 有点历史,我们主要是C / C ++商店所以我们目前使用scons来构建我们的系统。然而,我们遇到了很多问题,在scons中为Java端指定了动态生成的依赖关系。所以我们正在考虑使用Gradle作为编排工具,它将驱动scons来构建C ++端,构建Java端和依赖管理。
  • 如果我们可以使用gradle来由于我们公司有大量的spec文件,所以通过rpmbuild命令行从spec文件构建rpm包。此外,它还将推动更多Gradle的采用,因为我认为大多数人使用spec文件来构建rpm包。

  • 让我知道是否还有其他我能提供的东西。非常感谢你们
  • 可以试试 SetupBuilder 插件。它还构建了一个rpm安装程序。


    We're currently in the process of moving away from scons to gradle to build the java portions of our software. One thing we need is to build rpm from the spec file. So we tried to write custom task to execute rpmbuild to build rpm from spec file. The code boils down to this:

    def rpmPath = 'sample-master-5.0-128000-final.x86_64.rpm'
    def rpmArgs = ['--quiet', '-bb', 'SPECS/sample-rpm-spec.spec',  ' --define "rpmdir artifacts"',  ' --define "sourcedir ."', ' --define "version 5.0"', ' --define "targetdir build"', ' --define "name sample"', ' --define "pathname sample"', ' --define "arch x86_64"', ' --define "revision 128000"', ' --define "branchName master"']
    project.exec {
        workingDir '.'
        commandLine 'rpmbuild'
        args rpmArgs
    }
    

    and here is the spec file:

    # --define 'rpmdir dir' to specify the rpm destination directory
    # --define 'version x.y.z' to define a build version
    # --define 'sourcedir dir' to specify the location of the source directory
    
    %define _builddir .
    %define _rpmdir %{?rpmdir}%{!?rpmdir:RPMS}
    %define _rpmfilename %{pathname}-%%{VERSION}-%%{RELEASE}%{?final}%{!?final:%{nil}}.%%{ARCH}.rpm
    
    %define xyzapp /opt/xyzapp
    
    Summary: Sample Spec File
    Name: %{name}
    Version: %{version}
    
    Release: %{revision}
    License: Commercial
    Group: Applications/Imaging
    Vendor: Sample Company Inc.
    BuildRoot: %{_tmppath}/%{pathname}-buildroot
    BuildArchitectures: %{arch}
    
    Requires: first-rpm%{?branchName:-%{branchName}}%{!?branchName:} >= 2.10.0
    Requires: second-rpm%{?branchName:-%{branchName}}%{!?branchName:} >= 2.10.0
    
    %description
    Sample Spec description
    
    %build
    
    echo building with rpmdir=%{_rpmdir} version=%{version} sourcedir=%{sourcedir}
    
    # ensure the build root is clean
    if [ %{buildroot} != "/" ]; then
       rm -rf %{buildroot}
    fi
    
    mkdir -p %{_rpmdir}
    mkdir -p %{buildroot}/tmp/classes
    mkdir -p %{buildroot}%{xyzapp}
    mkdir -p %{buildroot}%{xyzapp}/webapp/WEB-INF/lib/
    
    if [ -f %{targetdir}/distributions/SampleZipArtifact.zip ]; then
       unzip %{targetdir}/distributions/SampleZipArtifact.zip -d %{buildroot}%{xyzapp}/
    fi
    
    # remove the server classes that should not be included with this plugin
    rm -rf %{buildroot}/tmp
    
    find %{buildroot} -name .svn -o -name .classpath -o -name .project | xargs rm -rf
    
    %clean
    
    if [ %{buildroot} != "/" ]; then
       rm -rf %{buildroot}
    fi
    
    %pre
    
    %post
    
    %preun
    
    %postun
    
    %files
    
    %defattr(-,xyzapp,users,-)
    %doc
    
    %{xyzapp}/webapp
    

    Essentially, by executing gradle buildSampleRpm We got the error:

    [ERROR] [system.err] error: No compatible architectures found for build

    Here's is the full debug logs to give you more details:

    14:23:16.462 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':buildSampleRpm'.
    14:23:16.490 [INFO] [org.gradle.process.internal.DefaultExecHandle] Starting process 'command 'rpmbuild''. Working directory: /mnt/hgfs/CSI/GradleRpmSample Command: rpmbuild --quiet -bb SPECS/sample-rpm-spec.spec  --define "rpmdir artifacts"  --define "sourcedir ."  --define "version 5.0"  --define "targetdir ."  --define "name sample"  --define "pathname sample"  --define "arch x86_64"  --define "revision 128000"  --define "branchName master"
    14:23:16.490 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Environment for process 'command 'rpmbuild'': {TERM=xterm, JAVA_HOME=/usr/lib/jvm/java, FLEX_SDK=4.11, SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/2695,unix/unix:/tmp/.ICE-unix/2695, GNOME_DESKTOP_SESSION_ID=this-is-deprecated, MAIL=/var/spool/mail/trungvo, GDMSESSION=gnome, XDG_SESSION_COOKIE=51806fc4a6f192828593c2df00000009-1428348402.461525-264542834, PWD=/mnt/hgfs/CSI/GradleRpmSample, HOSTNAME=tonycsicentos6, CVS_RSH=ssh, GIO_LAUNCHED_DESKTOP_FILE_PID=16285, G_BROKEN_FILENAMES=1, NLSPATH=/usr/dt/lib/nls/msg/%L/%N.cat, GNOME_KEYRING_SOCKET=/tmp/keyring-LiVncy/socket, CSI_DATA=/mnt/hgfs/CSI/Data/trunk, GDM_KEYBOARD_LAYOUT=us, HISTSIZE=1000, EDITOR=vi, PATH=/mnt/hgfs/CSI/Library/rhel5-64/ant/bin:/mnt/hgfs/CSI/Library/rhel5-64/Tools/flex_sdk_4.11/bin:/home/trungvo/gradle-2.3/bin:/mnt/hgfs/CSI/Library/rhel5-64/ant/bin:/mnt/hgfs/CSI/Library/rhel5-64/Tools/flex_sdk_4.11/bin:/home/trungvo/gradle-2.3/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/apache-ant-1.8.1/bin:/home/trungvo/bin:/opt/apache-ant-1.8.1/bin, GRADLE_HOME=/home/trungvo/gradle-2.3, QTLIB=/usr/lib64/qt-3.3/lib, GDCM_DATA_ROOT=/mnt/hgfs/CSI/Data/trunk/CSI/Rendering/gdcmData, GDM_LANG=en_US.utf8, XAUTHORITY=/var/run/gdm/auth-for-trungvo-dyz7I2/database, WINDOWPATH=1, FLEX_HOME=/mnt/hgfs/CSI/Library/rhel5-64/Tools/flex_sdk_4.11, USERNAME=trungvo, SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass, SHLVL=2, XFILESEARCHPATH=/usr/dt/app-defaults/%L/Dt, COLORTERM=gnome-terminal, CSI_LIB64=/mnt/hgfs/CSI/Library/rhel5-64, GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/gnome-terminal.desktop, WINDOWID=44040195, LOGNAME=trungvo, QTDIR=/usr/lib64/qt-3.3, SSH_AUTH_SOCK=/tmp/keyring-LiVncy/socket.ssh, OLDPWD=/home/trungvo/gradle-2.3, LIBGL_DRIVERS_PATH=/usr/local/lib/gallium, DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-9FkHHSyF0Z,guid=7c6139ab66bf88999c60bf4d0000013e, SHELL=/bin/bash, GNOME_KEYRING_PID=2685, GTK_RC_FILES=/etc/gtk/gtkrc:/home/trungvo/.gtkrc-1.2-gnome2, DESKTOP_SESSION=gnome, FLEX_HOME_4=/mnt/hgfs/CSI/Library/rhel5-64/Tools/flex_sdk_4.11, QTINC=/usr/lib64/qt-3.3/include, DISPLAY=:0.0, USER=trungvo, ANT_HOME=/mnt/hgfs/CSI/Library/rhel5-64/ant, GRADLE_OPTS=-Dorg.gradle.native=false, MESA_GLSL=opt,nopvert,nopfrag, HOME=/home/trungvo, HISTCONTROL=ignoredups, LESSOPEN=|/usr/bin/lesspipe.sh %s, MALLOC_TRIM_THRESHOLD_=128*1024, LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:, ORBIT_SOCKETDIR=/tmp/orbit-trungvo, LANG=en_US.utf8}
    14:23:16.499 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
    14:23:16.506 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: command 'rpmbuild'.
    14:23:16.516 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
    14:23:16.517 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
    14:23:16.517 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command 'rpmbuild''
    14:23:16.545 [ERROR] [system.err] error: No compatible architectures found for build
    14:23:16.569 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: FAILED
    14:23:16.569 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'command 'rpmbuild'' finished with exit value 1 (state: FAILED)
    14:23:16.570 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':buildSampleRpm'
    14:23:16.571 [LIFECYCLE] [class org.gradle.TaskExecutionLogger] :buildSampleRpm FAILED
    

    • Did we miss to pass in the architecture in the command?
    • Please note that we do pass in --define 'arch x86_64'
    • We did try to pass in the option --buildarch x86_64, but apparently, it's the unknown option for our version of rpmbuild
    • If we execute the rpmbuild command directly from the terminal, it works just fine, however, as soon as we execute the rpmbuild in the gradle shell, things starting to break. That makes me to think that it's properly we missed to passed in some configuration into the Gradle.project.exec
    • You can download the full sample source code from here: https://dl.dropboxusercontent.com/u/59660821/GradleRpmSample.zip
    • I'm running gradle on Centos 6.4
    • I did think about using nebula.os-package however, according to their API they use Gradle DSL to construct rpm packages. It doesn't offer a way for us to construct rpm package from spec files. We have a huge amount of spec files, converting spec files logic to Gradle DSL is not an option for us at the moment.
    • I looked around and apparently scons/python is a preferred choice for building rpm packages from spec files, so I'm trying to use gradle to drive scons to build rpm from spec files with rpmbuild command
    • Little bit history, we're mainly C/C++ shops so we're currently using scons to build our system. However, we run into many problems with specifying dynamically generated dependency in scons for Java side. So we're thinking of using Gradle as orchestration tool where it would drive scons to build C++ side, build Java side and dependency management.
    • It would be very nice if we could use gradle to build rpm packages from spec files through rpmbuild command line as our company have huge amount of spec files. Furthermore, it would also drive more Gradle adoption as I think most people use spec files to build rpm packages.
    • Let me know if there's anything else I can provide. Thank you very much guys

    解决方案

    You can try the SetupBuilder plugin. It build also an rpm installer.

    这篇关于rpmbuild的自定义gradle任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆