Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I import one Gradle script into another?

I have a complex Gradle script that wraps up a load of functionality around building and deploying a number of NetBeans projects to a number of environments.

The script works very well, but in essence it is all configured through half a dozen maps holding project and environment information.

I want to abstract the tasks away into another file, so that I can simply define my maps in a simple build file, and import the tasks from the other file. In this way, I can use the same core tasks for a number of projects and configure those projects with a simple set of maps.

Can anyone tell me how I can import one Gradle file into another, in a similar manner to Ant's task? I've trawled Gradle's docs to no avail so far.

Additional Info

After Tom's response below, I thought I'd try and clarify exactly what I mean.

Basically I have a Gradle script which runs a number of subprojects. However, the subprojects are all NetBeans projects, and come with their own ant build scripts, so I have tasks in Gradle to call each of these.

My problem is that I have some configuration at the top of the file, such as:

projects = [     [name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],     [name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"] ] 

I then generate tasks such as:

projects.each({     task "checkout_$it.shortname" << {          // Code to for example check module out from cvs using config from 'it'.     } }) 

I have many of these sort of task generation snippets, and all of them are generic - they entirely depend on the config in the projects list.

So what I want is a way to put this in a separate script and import it in the following sort of way:

projects = [     [name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],     [name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"] ]  import("tasks.gradle") // This will import and run the script so that all tasks are generated for the projects given above. 

So, in this example, tasks.gradle will have all the generic task generation code in, and will get run for the projects defined in the main build.gradle file. In this way, tasks.gradle is a file that can be used by all large projects that consist of a number of sub-projects with NetBeans ant build files.

like image 708
Anthony Roy Avatar asked Feb 15 '10 10:02

Anthony Roy


People also ask

Can we have 2 build Gradle?

Hello , can i create multiple build. gradle for one project? Yes. You can have multiple build files in one project.

What is the use of Buildscript in Gradle?

Gradle builds a script file for handling two things; one is projects and other is tasks. Every Gradle build represents one or more projects. A project represents a library JAR or a web application or it might represent a ZIP that is assembled from the JARs produced by other projects.


2 Answers

There is a new feature in 0.9. You can use apply from: 'other.gradle' command.

Read my question about same thing at: Is there a way to split/factor out common parts of Gradle build

like image 128
Andrey Adamovich Avatar answered Sep 24 '22 10:09

Andrey Adamovich


The answer to the question turned out to be in the Plugins system, where you can add the desired functionality in a set of plugins which can be groovy files located in the directory buildSrc/src/main/groovy. Plugins can also be bundled as a Jar though I haven't tried this.

Details here: Custom Plugins

like image 29
Anthony Roy Avatar answered Sep 22 '22 10:09

Anthony Roy