With the release of Grails 3.1 we can use features, defined in a profile, when we create a new application. Features will add certain dependencies to our Grails project, so we can start quickly. To see which features are available we use the profile-info command. This command lists available features for an application. We can choose the features we want to be included and pass them via the --features command line option of the create-app command.
When we look at the features available for the rest-api profile we see the following list:
$ grails profile-info rest-api ... Provided Features: -------------------- * asset-pipeline - Adds Asset Pipeline to a Grails project * hibernate - Adds GORM for Hibernate to the project * json-views - Adds support for JSON Views to the project * markup-views - Adds support for Markup Views to the project * mongodb - Adds GORM for MongoDB to the project * neo4j - Adds GORM for Neo4j to the project * security - Adds Spring Security REST to the project $
Let's create a new Grails application with the rest-api profile and use the mongodb, json-views and security features:
$ grails create-app --profile rest-api --features mongodb,json-views,security api | Application created at /Users/mrhaki/Projects/mrhaki.com/blog/posts/samples/grails31/api $
When we look at the contents of the generated build.gradle we can see dependencies for the features we have selected:
// File: build.gradle
buildscript {
ext {
grailsVersion = project.grailsVersion
}
repositories {
mavenLocal()
maven { url "https://repo.grails.org/grails/core" }
}
dependencies {
classpath "org.grails:grails-gradle-plugin:$grailsVersion"
classpath "org.grails.plugins:views-gradle:1.0.0"
}
}
version "0.1"
group "api"
apply plugin:"eclipse"
apply plugin:"idea"
apply plugin:"org.grails.grails-web"
apply plugin:"org.grails.plugins.views-json"
ext {
grailsVersion = project.grailsVersion
gradleWrapperVersion = project.gradleWrapperVersion
}
repositories {
mavenLocal()
maven { url "https://repo.grails.org/grails/core" }
}
dependencyManagement {
imports {
mavenBom "org.grails:grails-bom:$grailsVersion"
}
applyMavenExclusions false
}
dependencies {
compile "org.springframework.boot:spring-boot-starter-logging"
compile "org.springframework.boot:spring-boot-autoconfigure"
compile "org.grails:grails-core"
compile "org.springframework.boot:spring-boot-starter-actuator"
compile "org.springframework.boot:spring-boot-starter-tomcat"
compile "org.grails:grails-plugin-url-mappings"
compile "org.grails:grails-plugin-rest"
compile "org.grails:grails-plugin-codecs"
compile "org.grails:grails-plugin-interceptors"
compile "org.grails:grails-plugin-services"
compile "org.grails:grails-plugin-datasource"
compile "org.grails:grails-plugin-databinding"
compile "org.grails:grails-plugin-async"
compile "org.grails:grails-web-boot"
compile "org.grails:grails-logging"
compile "org.grails.plugins:cache"
compile "org.grails.plugins:views-json"
compile "org.grails.plugins:mongodb"
compile "org.grails:grails-plugin-gsp"
compile "org.grails.plugins:spring-security-rest:2.0.0.M1"
console "org.grails:grails-console"
profile "org.grails.profiles:rest-api:3.1.0"
testCompile "org.grails:grails-plugin-testing"
testCompile "org.grails.plugins:geb"
testCompile "org.grails:grails-datastore-rest-client"
testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1"
testRuntime "net.sourceforge.htmlunit:htmlunit:2.18"
}
task wrapper(type: Wrapper) {
gradleVersion = gradleWrapperVersion
}
Written with Grails 3.1.