Those descriptors are used at runtime by the container, and Maven is not running at that time (Maven runs at build time). That is why there are needed (though in more recent versions of
Java EE they are optional - the container can easily learn the necessary information by scanning the classes).