Unfortunately, Maven doesn't understand "is an implementation of". For example, so if you declare a dependency on one of Geronimo's Servlet 2.5 API jars, you may also end up with Sun's servlet-api-2.5.jar on your classpath as wellthe MyFaces JSF implementation, and you have a transitive dependency on Sun's JSF reference implementation, you will end up with both of them on your classpath because Maven can't tell they are the same thing.
The same applies if you host an internal repository and want to use IBM's or BEA's Java EE implementations, which aren't available in the public repository.
The Servlet API jar is generally not a problem because it is almost always declared with 'provided' scope, which takes it out of transitive dependency resolution. Otherwise you might end up with one of Geronimo's Servlet 2.5 API jars, as well as Sun's servlet-api-2.5.jar on your classpath.