Gradle
Gradle combines the power and flexibility of Ant with the dependency management and conventions of Maven into a more effective way to build. Powered by a Groovy DSL and packed with innovation, Gradle provides a declarative way to describe all kinds of builds through sensible defaults. Gradle is quickly becoming the build system of choice for many open source projects, leading edge enterprises and legacy automation challenges.
Gradle is quickly gaining popularity as flexible Java build system, which can be used in situations requiring writing custom build logic. Flexibility means that Gradle build scripts can differ significantly across different projects and there is no universal way of packaging Gradle projects. However, in most common situations the following steps are necessary:
-
Add build-dependency on
gradle-local
-
In the
%build
section of the spec use%gradle_build
macro to invoke Gradle in local, offline mode to build the project -
In the
%install
section, use%mvn_install
macro to install Maven artifacts produced during build -
Use generated file
.mfiles
lists to populate%files
section with-f
switch
BuildRequires: gradle-local
...
%build
%gradle_build
%install
%mvn_install -J ...
%files -f .mfiles
%files javadoc -f .mfiles-javadoc
%gradle_build
macro is very similar to %mvn_build
and it takes the same
arguments. It is a wrapper for gradle
command which enables so called
"local mode" of artifact resolution - dependency artifacts are resolved from
local system before trying other repositories (system Maven repositories are
used through XMvn). By default %gradle_build
invokes Gradle with build
goal, but when tests are skipped (option -f
) then assemble
goal is
invoked instead.
In most simple cases calling %gradle_build
should be enough to resolve all
dependencies, but sometimes additional patching of build script may be
necessary. The following example patch adds XMvn resolver to make Gradle
correctly resolve dependencies of build script itself.
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index a3cb553..50dd2a4 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -21,6 +21,7 @@ apply plugin: 'idea'
apply plugin: 'eclipse'
repositories {
+ xmvn()
maven { url 'https://repo.gradle.org/gradle/libs' }
mavenCentral()
}
Once Gradle build completes, all Maven artifacts produced by the build will
be marked for installation. %mvn_install
macro, which should be called
from the %install
section of spec file, automatically handles installation
of all marked artifacts and generates .mfiles
file lists, which are used
to define package contents through %file
sections. If you are building
Javadocs (recommended) then you should call %mvn_install
with -J
argument pointing to directory containing generated Javadoc documentation.
Most of Maven macros starting with %mvn_
can also be used when building
packages with Gradle. This includes macros that control which artifacts
should be installed where and how (%mvn_package
, %mvn_alias
,
%mvn_file
, %mvn_compat_version
), %mvn_artifact
that is used to mark
additional artifacts as installable and %mvn_config
which can be used to
add extra config for XMvn.