JReleaser can generate and publish a RPM Spec file and publish it to a repository that you have access to.
The spec
section specifies how the Spec should be created.
The following artifact extensions are supported by this packager:
-
.tbz2
-
.tgz
-
.txz
-
.tar.gz
-
.tar.xz
-
.tar.bz2
-
.tar
-
.zip
Distribution | Supported |
---|---|
concepts:distributions/binary.adoc |
{icon_req_y} |
concepts:distributions/flat-binary.adoc |
{icon_req_y} |
concepts:distributions/java-binary.adoc |
{icon_req_y} |
concepts:distributions/jlink.adoc |
{icon_req_y} |
concepts:distributions/native-image.adoc |
{icon_req_y} |
concepts:distributions/native-package.adoc |
{icon_req_n} |
concepts:distributions/single-jar.adoc |
{icon_req_n} |
Warning
|
Publication of snapshots is not allowed. |
- YAML
-
partial$packagers/yaml/common-head.adoc partial$packagers/yaml/template-directory.adoc partial$packagers/yaml/commitauthor.adoc partial$packagers/yaml/tap.adoc partial$packagers/yaml/package-name.adoc # Spec release number. # Defaults to `1%{?dist}`. # [dot circle] release: '1%{?dist}' # List of package requirements. # Defaults to `[java]`. # [exclamation triangle] categories: - 'java'
- TOML
-
partial$packagers/toml/common-head.adoc partial$packagers/toml/template-directory.adoc partial$packagers/toml/commitauthor.adoc partial$packagers/toml/tap.adoc partial$packagers/toml/package-name.adoc # Spec release number. # Defaults to `1%{?dist}`. # [dot circle] release = "1%{?dist}" # List of package requirements. # Defaults to `[java]`. # [exclamation triangle] categories = ["java"]
- JSON
-
partial$packagers/json/common-head.adoc partial$packagers/json/template-directory.adoc partial$packagers/json/commitauthor.adoc partial$packagers/json/tap.adoc partial$packagers/json/package-name.adoc // Spec release number. // Defaults to `1%{?dist}`. // [dot circle] "release": "1%{?dist}", // List of package requirements. // Defaults to `[java]`. // [exclamation triangle] "categories": ["java"], partial$packagers/json/common-footer.adoc
- Maven
-
partial$packagers/maven/common-head.adoc partial$packagers/maven/template-directory.adoc partial$packagers/maven/commitauthor.adoc partial$packagers/maven/tap.adoc partial$packagers/maven/package-name.adoc <!-- Spec release number. Defaults to `1%{?dist}`. [dot circle] --> <release>1%{?dist}</release> <!-- List of package requirements. Defaults to `[java]`. [exclamation triangle] --> <categories>java</categories> partial$packagers/maven/common-footer.adoc
- Gradle
-
partial$packagers/gradle/common-head.adoc partial$packagers/gradle/template-directory.adoc partial$packagers/gradle/commitauthor.adoc partial$packagers/gradle/tap.adoc partial$packagers/gradle/package-name.adoc // Spec release number. // Defaults to `1%{?dist}`. // [dot circle] release = '1%{?dist}' // List of package requirements. // Defaults to `[java]`. // [exclamation triangle] categories = ['java'] partial$packagers/gradle/common-footer.adoc
Assuming the current version is 1.2.3
, and a distribution named app
, the above configuration will generate
a app.spec
file in the duke/duke-spec
repository:
Name: app
Version: 1.2.3
Release: 1%{?dist}
Summary: Sample App
License: Apache-2.0
URL: https://acme.com/app
Source0: https://github.com/duke/app/releases/download/v1.2.3/app-1.2.3.tar.gz
BuildArch: noarch
Requires: java
%description
Sample app
%prep
%setup -q
%install
mkdir -p %{buildroot}%{_bindir}
%define _appdir %{buildroot}%{_datadir}/%{name}
mkdir -p %{_appdir}/bin
cat > %{buildroot}%{_bindir}/app <<-EOF
#!/bin/sh
%{_datadir}/%{name}/bin/app "$@"
EOF
chmod 0755 %{buildroot}%{_bindir}/app
mkdir -p %{_appdir}/lib
install -p -m 755 bin/app %{_appdir}/bin/app
install -p -m 644 lib/app-%{version}.jar %{_appdir}/lib/app-%{version}.jar
%files
%{_bindir}/%{name}
%{_datadir}/%{name}/bin/app
%{_datadir}/%{name}/lib/app-%{version}.jar
You may configure automated builds with Fedora COPR or any other service that accepts spec files as inputs.
If there is more than one matching artifact in a given distribution you may add a skipSpec
extra property to the target
artifact to mark it as skipped for packaging with Spec.
The default location for templates is:
src/jreleaser/distributions/<distribution-name>/spec
The following list shows the filenames that may be used to override default templates:
-
app.spec.tpl
Any additional files found in the template directories will be copied as is unless their filename ends with .tpl
in
which case name-templates.adoc substitution will take place.
Templates may be initialized using the template
command
{icon_cli_s} template, {icon_maven_s} jreleaser:template, {icon_gradle_s} jreleaserTemplate, {icon_ant_s} jreleaser-template
You may skip any template files by defining a set of skip rules in the skipTemplates
property. For example, you may use
any of these expressions to skip a template named README.md.tpl
:
-
README.md.tpl
: matches the full template name -
README.md
: matches the transformed template name -
README.*
: matches using a regex