Assembly is a plugin that provides a goal. "Plugin" is a bit of a misnomer sometimes. Eclipse, for example, is virtually nothing
but plugins, but we tend to think of it as a unified whole. The
Tomcat webapp server is pretty much the same thing, only less likely to see mods to the core plugin set.
One of the things I dislike about Maven is that it's "magic". That is, unlike Ant, where you can plainly see a process flow, in Maven, you specify a goal and Maven handles everything automatically, and more or less invisibly. So, for example, the Assembly plugin internally triggers the Dependency plugin as a pre-requisite step in the process.
This isn't always automatic, however. The reason why I have to say "mvn compile war:war" is that the war:war goal does not automatically invoke the compile goal and I have to do it manually. I'd be less happy about that except that a "mvn war:exploded" goal also won't invoke compile and that means that an on-the-fly reassembly of a webapp being debugged won't automatically replace all of the running classes (which usually ends up badly).