It uses Maven.
At first, I thought to myself, "This is not a good thing." Not just because it meant that I had to go download Maven, but because every previous encounter I've had with Maven has ended rather unpleasantly... except I have to admit, the relief of not using Maven any more, that was pretty pleasant. (It's sort of like the euphoria you get when you finally lose a really crappy job. "Boy, I hated washing cars, every second I was there. I may not have a job, but man, am I happy to be gone!")
Well, I fired up a warning flare when I got Rome, because I dislike builds that want to go to the network in order to build. I use a laptop, a frequently disconnected one, which is why it's able to stay on my lap. No wires good, some wires bad, right? (I'm conveniently ignoring my use of a USB mouse, 100% of the time.) The developers, though, like Maven, because it does everything for them - like, download dependent jars (by version!), run checkstyle, javadoc, run tests, generate more reports about your code than I can easily describe - I'm stunned, really.
The only problem is that I don't want most of that.
If I'm dependent on a versioned jar file, I include it in the build.
If I want to run checkstyle, I have an Ant task do that.
If I want to generate docs, I have an Ant task to do that.
If I want to run tests, I have an Ant task to do that.
If I want to generate reports about my code, I wonder who slipped something funky in my drink that drove me into retarded-manager mode.
What's more, it's nontrivial to actually change the build. Rome doesn't have tests that I saw. I can understand why - getting them in the build isn't the easiest thing. (In Ant, of course, it's nothing to do. Compile, add a JUnit task.) Adding resources to the Maven build is not impossible, but... sheesh, I have to LOOK for stuff.
And it takes six minutes to run a Maven build that doesn't even build all modules!
I sputter. I stutter. I'm aghast.
It takes longer to build the project with Maven than it did to add the code I wanted, plus the test to make sure it worked properly. I can't even quickly add some of the mechanisms plus their tests, because Maven takes too freakin' long - by the time Maven's done, I've forgotten what it was I was trying to do.
Maybe maven is the great white hope of build tools. Maybe my inexperience with it means that I'm finding it very difficult to do the simple things I want to do, and it's all my fault that Maven makes me want to puke.
Honestly, though... if my tool requires me to learn a lot, and costs me a lot of time in the process of development, I've got to find a better tool because this one sucks. It makes it difficult to use an IDE, because it means dependencies are splattered into the Maven structure instead of the project structure. It's verbose and slow. I'd be done by now if I'd had a decent build process, and I have been trying (up to now) to not duplicate the work they've put into creating the Maven structure, because they like Maven and I hate wasting effort. For me, though, Maven is so bad that it disrupts the development process and I've decided that I won't use it.
Maven speed is allegedly to be improved in Maven-2, which has been underway
for a fair while now.
IDE usage with Maven seems easier than using the IDE. I'm not a heavy IDE user, but when I checkout a project, run maven-eclipse through Eclipse (which auto-refreshes the project) and it's all configured automatically.
Putting jars in the project itself is bad. Let's say you depend on commons-lang. Either you have a jar file called 'commons-lang.jar', which loses the version information, or you keep having to add new versions and remove old ones.
One major plus of Maven is that it easily introduces new products to people. Another major plus is that it is great for a team, you don't need everyone to keep hacking Ant scripts, or copy and pasting them from project to project.
Admittedly, the new Ant include feature helps here.
Maven speed is improved: good, because it's plain horrible right now. Acceptable for a "final build," I suppose, where it does everything, but atrocious for actual development.
As far as Maven usage being better than the IDE: Well, opinions differ there, certainly, but MY experience would say that if that's true for you, you need to get a better IDE. I tried it with Eclipse, JBuilder, and IDEA, and in all cases the IDEs were far easier and more convenient than Maven.
Jars in the project is NOT bad, provided you're not using a jar whose core interfaces change. Then you can replace a version without too much of a problem - except you DID mention commons-lang, which rather explains why this is a problem for you.
"Introduces new products to people?" How? Does it write kind letters of introduction? I think not.
Plus, writing an ant script is trivial. ANother red herring.
Sorry, Henri - I disagree with almost every point you have here.
maven console
There you go, now you can whinge about some other speed red herring.
Tests taking to long for incremental development?
maven -Dmaven.test.skip=true console
And it's not the writing of ant scripts that is the issue, it's the mindless copying and pasting. Albeit improved with ant 1.6
Bert
Take the time to learn maven and you will reap the rewards. Expect it to
solve your problems in 5 minutes because you think the build process is
trivial means you're using the wrong tool. Anwyays, if it was trivial you
could do a rewrite in Ant to build Rome in 5 minutes, right?
boogernut
As I mentioned on the Rome dev mailing list, the same Mave build takes 28
seconds on my computer. I'm not sure what the different is, but something
very bad is happening there. Which part of the build is taking all the
time?
Does it make any difference if you run maven is offline mode (maven -o)?
adding versioned jars and removing old ones is a big issue? say what?
explicitly knowing what your dependencies are is a _good_ thing.
scot