Karan Khanna
Karan Khanna

Reputation: 209

Load different stylesheets when packaging a war file with Grails

I want to package a Grails application for different brands. While generating a war file, I want to pass some custom parameter that refers to a certain brand and styles the application by loading the stylesheet for the brand.

I read online and one approach I found was with maven. I tried working with maven but I am stuck while initially compiling the application. The error is

Failed to execute goal org.grails:grails-maven-plugin:2.2.1:maven-compile 
(default-maven-compile) on project foreAction: Forked Grails VM exited with error. 

I am stuck as to what approach to take now. I searched for the above error and tried different solutions but nothing seems to work.

If there is a different way without using Maven I am willing to give it a shot.

Upvotes: 0

Views: 107

Answers (1)

Joshua Moore
Joshua Moore

Reputation: 24776

You could always hook into the events using scripts/_Events.groovy and replace the appropraite CSS/assets. The documentation explains how to hook into build events.

Your code inside scripts/_Events.groovy might look something like this:

// This is called after the staging dir is prepared but before the war is packaged.
eventCreateWarStart = { name, stagingDir ->
  // place your code here that copies your resources to the appropriate location in the staging directory.
  Ant.copy(
    file: System.getProperty('somePassedInFile'), 
    toFile: "${stagingDir}/assets/stylesheets/whatever.css", 
    overwrite: true
  )    

}

Then you can pass in the value of the source file from grails prod war like this:

grails prod war -DsomePassedInFile=/path/to/file.css

Hope this helps at least give you an idea of how you can accomplish this. (All written off the top of my head so beware of typos etc.)

Upvotes: 1

Related Questions