My current project deploys in OpenShift as a fat-jar
(it means a runnable jar
file packed together with all its classpath dependencies) . It also uses sbt
(Scala Build Tool).
There was a need to add a special file in the resulted fat-jar which had to be generated at the compile time. So after hours of searchings I decided to use resourceGenerators
in sbt.
This plug-in makes it easy to generate almost any resources and add them to the final jar. I’ve needed to add custom pom.properties
file with a few lines of parameters like groupId
, artifactId
and version
. Don’t even ask me why I wanted such functionality 🙂
My final implementation looks like following:
resourceGenerators in Compile += Def.task { val file = ((resourceDirectory in Compile).value / "META-INF" / "pom.properties") val contents = groupId=%s\nartifactId=%s\nversion=%s".format("com.sample","Triad", "1.0.0-SNAPSHOT") IO.write(file, contents) Seq(file) }
So here I defined a file pom.properties
in the /resources/META-INF folder and filled it with a content stored in contents
.
As a result we see pom.properties
in the META-INF
folder of the final built jar:
Conclusion
resourceGenerators
is a powerful sbt feature which allows you to generate almost any resources and put them to the final result.