Please note: Although I mention the ShadowJar plugin in this question, it is just for providing full context. I am confident any Gradle Guru can answer this, regardless of their knowledge level of ShadowJar.
Currently my Groovy project is built with the following Gradle build invocation:
gradle clean build shadowJar
Running this invocation produces a packaged fat jar under build/libs
with the version
property specified in my gradle.properties
file. For instance, if gradle.properties
has a version=1.2.3
, then the above invocation produces build/libs/myapp-1.2.3.jar
.
What it doesn't produce, however, is a valid POM for my app. And so I found this answer and modified it a bit to produce:
task createPom << {
pom {
project {
groupId ${group}
artifactId 'myapp'
version ${version}
}
}.writeTo("build/libs/pom.xml")
}
My thinking is that group
and version
(both specified in gradle.properties
) would be "injected", and that this should produce a pom.xml
in the same directory as my fat jar.
After adding the createPom
task, I run:
gradle clean build shadowJar createPom
And I get this error:
FAILURE: Build failed with an exception.
* Where:
Build file 'D:\workspace\blah\myapp\build.gradle' line: 89
* What went wrong:
Execution failed for task ':createPom'.
> No signature of method: java.lang.Object.$() is applicable for argument types: (java.util.Collections$EmptyMap, null) values: [[:], null]
Possible solutions: any(), is(java.lang.Object), wait(), find(), dump(), grep()
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 11.673 secs
What is going on here?