I am brand new to gradle, this is the first time I try it, and I find it really powerful.
I am working - for fun - on some spring boot + angular project , I decided to go with gradle because I like Groovy (The language that grails is written as a DSL; however gradle is written in Java as well as groovy).
However Eclipse support is not as much good as Maven, but I started the spring boot using gradle as the build tool and every thing is fine.
Now I need to build the spring project as well as the angular project (which is based on angular-seed that uses npm and bower).
I find a plugin for gradle for this task (gradle-node-plugin), this plugin allow you to do:
gradle npm-install
so, the npm install command will run and that what I need, but I need it to run with gradle build command.
First the npm-install task of gradle run by default package.js file found in src/main/java, So I have to write my own task to make it uses spring-boot conventions (src/main/resources/static)
And thanks to the author of this plugin, he makes it easily to extend his plugin, so I wrote:
task my_npm_install(type: NpmTask) {
description = "Installs dependencies from package.json"
workingDir = file("${project.projectDir}/src/main/resources/static")
args = ['install']
}
Here I am defining a new task (enhanced task), that is of type NpmTask (defined in gradle-node-plugin) then set some properties (defined by the parent task (NpmTask) ), so it can do the job.
so, now I can run: gradle my_npm_task and gradle now will run npm install against the correct package.json file.
What is remaining is to have the this task run after I run gradle build (the build task).
Thanks to the amazing tasks dependency feature provided by gradle, I can refer to some task (provided by java plugin - I think) and make it depends on another task (the one I wrote).
Like this: build.dependsOn(my_npm_install)
Then when I run gradle build, here's the output:
.....
......
So that, the build task will run my_npm_install: (here's the output of gradle build command):
:check
:nodeSetup SKIPPED
:my_npm_install
:build
.......
......
gradle run the my_npm_install task before the build task.
Again, gradle is much more powerful and flexible than maven, and have a better syntax as well.
No comments:
Post a Comment