In several occasions I had to build RPM packages for installing software. In the past I mostly did it with a Maven build using the RPM Maven Plugin
.
The process is simple: At the end of your build you gather up all resources, try to understand the mapping configuration, bang your head a few times in order to figure out way to work with -SNAPSHOT
versions and that’s it. In the end you have a few RPM files.
The only problem is, that the plugin actually creates a spec
file and runs the rpmbuild
command line tool. Which is, of course, only available on an RPM like system. Fortunately Debian/Ubuntu based distributions, although they use something different, provide at least the rpmbuild
tool.
On Windows or Mac OS the situation looks different. Adding rpmbuild
to Windows can be quite a task. Still the question remains, why this is necessary since Java can run on all platforms.
So time to write a Maven plugin which does not the rpmbuild
tool, but create RPM packages native in Java:
de.dentrassi.maven:rpm
is a Maven Plugin which does create RPM packages using plain Java as a Maven Plugin. The process is simply and fast and does not require additional command line tool. The plugin is open source and the source code is available on GitHub ctron/rpm-builder.
6 thoughts on “Building RPMs on any platform with Maven”
Really good thanks, worked well for my usecase. Just wondering if you had considered following it up with deploy/install as an artifact to a repository(nexus).
I see the “attach=true” option now!! ignore
So the answer is yes :-)
Thanks for the positive feedback!
Great plugin – thanks! But I noticed that the package name is always made lowercase – this is surprising behavoiour. What’s the rationale behind it? Can it be changed, or made optional?
I will make a new version in the next few days, based on Package Drone 0.14.1. And I will add an option to allow non-lowercase names. Also see: [1].
[1] https://github.com/ctron/rpm-builder/issues/6
Thanks very much, great plugin, it’s saved me a load of work. However I can’t get signing to work, signing seems to work ok but rhnpush always says no signature. If I sign via rpm –addsign using the same key then I can use rhnpush. There is a difference in the signature information,
bash-4.2$ rpm –checksig -v signedmaven.rpm
signedmaven.rpm:
Header V4 RSA/SHA1 Signature, key ID a5514418: OK
Header SHA1 digest: OK (ee8b2aacd073230defef2899230f05c8860622ea)
MD5 digest: OK (28e62686840244cd6bb632199b86f436)
Now using a file signed with rpm –addsign
bash-4.2$ rpm –checksig -v signedrpm.rpm
signedrpm.rpm:
Header V4 RSA/SHA1 Signature, key ID a5514418: OK
Header SHA1 digest: OK (8ea4cbee4c3f29265e3fb2c33ca176c2955f147f)
V4 RSA/SHA1 Signature, key ID a5514418: OK
MD5 digest: OK (7e2a666a5a0e531b327f5eba3015e217)
See the extra line in the rpm signed data?
V4 RSA/SHA1 Signature, key ID a5514418: OK