If you are building a modern JavaEE 6 application you might need to package it in EAR.
Supposingly, specification says if your EAR contains META-INF/application.xml file, you must provide configuration of modules so that the application server knows what to load.
Now, specification also supposingly says that, if you want your application server to AUTO DISCOVER your modules (EJBs, CDI beans and so on) you MUST omit application.xml file alltogether.
Well I didn’t know that and wasted serious amount of time making the EAR the “right way”.
So how do I create EAR easily if I live in a maven world?
Luckily there is maven-ear-plugin that supposingly allows for easy EAR creation. Modern versions of this plugin has an configuration option named generateApplicationXml that makes maven-ear-plugin to stop generating application.xml… supposingly.
If you simply add the generateApplicationXml to your plugin configuration, your build will fail with the message:
Failed to execute goal org.apache.maven.plugins:maven-ear-plugin:2.8:ear (default-ear) on project my-ear: Deployment descriptor: my-ear\target\retena-worker-ear\META-INF\application.xml does not exist. -> [Help 1]
Ye okay, another couple of hours searching internet until I came up to solution. maven-ear-plugin has another configuration option called version this indicates somehow the java version the descriptors are to be generated for. And only combo of generateApplicationXml and version makes the plugin to stop generating application.xml and not failing to build.
Stupid me or stupid plugin?
Here’s a complete example:
my-ear org.apache.maven.plugins maven-ear-plugin 2.8 6 false lib