Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven profiles equivalent of Gradle

I'm trying to achieve a simple scenario in my spring boot project build: including / excluding dependencies and packaging war or jar depending on the environment.

So for example, for the environment dev include devtools and package jar, for prod package war etc.

I know it is not XML based configuration anymore and I can basically write if statements in my build.gradle but is there a recommended way of achieving this?

Can I declare some common dependencies and refer them in a single file instead of creating multiple build files?

Is there a best practice changing build configuration based on the build target environment?

like image 875
Mehmet Catalbas Avatar asked Nov 17 '16 16:11

Mehmet Catalbas


People also ask

What is equivalent to Gradle task in Maven?

Gradle is based on a graph of task dependencies – in which tasks are the things that do the work – while Maven is based on a fixed and linear model of phases. With Maven, goals are attached to project phases, and goals serve a similar function to Gradle's tasks, being the “things that do the work.”

What are Maven build profiles?

A Build profile is a set of configuration values, which can be used to set or override default values of Maven build. Using a build profile, you can customize build for different environments such as Production v/s Development environments. Profiles are specified in pom.

Is Maven same as Gradle?

The biggest differences are Gradle's mechanisms for work avoidance and incrementality. The top 3 features that make Gradle much faster than Maven are: Incrementality — Gradle avoids work by tracking input and output of tasks and only running what is necessary, and only processing files that changed when possible.

What is Gradle in Maven?

What is Gradle? Gradle is a build automation system that is fully open source and uses the concepts you see on Apache Maven and Apache Ant. It uses domain-specific language based on the programming language Groovy, differentiating it from Apache Maven, which uses XML for its project configuration.


2 Answers

ext {     devDependencies = ['org.foo:dep1:1.0', 'org.foo:dep2:1.0']     prodDependencies = ['org.foo:dep3:1.0', 'org.foo:dep4:1.0']     isProd = System.properties['env'] == 'prod'     isDev = System.properties['env'] == 'dev' }  apply plugin: 'java'  dependencies {     compile 'org.foo:common:1.0'     if (isProd) {        compile prodDependencies     }     if (isDev) {        compile devDependencies     } }  if (isDev) tasks.withType(War).all { it.enabled = false } 
like image 94
lance-java Avatar answered Oct 10 '22 21:10

lance-java


My version (inspired by Lance Java's answer):

apply plugin: 'war'  ext {   devDependencies = {     compile 'org.foo:dep1:1.0', {       exclude module: 'submodule'     }     runtime 'org.foo:dep2:1.0'   }    prodDependencies = {     compile 'org.foo:dep1:1.1'   }    commonDependencies = {     compileOnly 'javax.servlet:javax.servlet-api:3.0.1'   }    env = findProperty('env') ?: 'dev' }  dependencies project."${env}Dependencies" dependencies project.commonDependencies  if (env == 'dev') {   war.enabled = false } 
like image 30
Vyacheslav Shvets Avatar answered Oct 10 '22 20:10

Vyacheslav Shvets