This has worked well for a long time, until I decided recently to upgrade some of the libraries that I use. Now, in Ant, you just download the libraries you need and put the jar-files in your classpath.
That works fine if your libraries are not complicated. But I noticed that some of my libraries are now dependant on yet other libraries.
In short, I just spent an hour in getting the libraries I need, then getting the required libraries of those libraries, ad infinitum.
Maven takes care of this whole slog, by putting the responsibility for defining the required libraries for a framework/library squarely on the shoulders of that framework/library.
What I was stuck with was finding the best way of changing my Ant-based project into a Maven-based project.
Moving from Ant to Maven
The easiest way that I could come up with is to create a brand new Maven-based project. The original was a Web Application, so the new Maven project should also be a Web Application. As far as I could tell every possibility for a new ant-based project is also available as a new maven-based project.
And then start moving files over to the appropriate place in the new Maven structure.
I really like the fact that Git actually detects these moves instead of like in the old days, when a move was an explicit delete and create of two non-related files, making you lose your entire history of that file.
The difference in the directory structure is as follows:
You do notice that Maven actually has a more layered structure, whereas Netbeans Ant basically dumps everything in the root.
So, the move basically entailed the following:
From ant | To Maven |
---|---|
build.xml | pom.xml |
- | nb-configuration.xml |
nbproject | - |
lib | - (actually stored in your m2 repo) |
src/conf | src/main/resources |
src/java | src/main/java |
web | src/main/webapp |
test | src/test/java |
build | target |
dist/karchangame.war | target/karchangame-1.0-SNAPSHOT.war |
Pom.xml
I only needed to make a few changes to my pom.xml file, in order to get all the dependencies sorted out.JMockit
Needed to add JMockit, or my testcode didn't compile.<dependency>
<groupId>org.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>1.10</version>
<scope>test</scope>
</dependency>
<groupId>org.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>1.10</version>
<scope>test</scope>
</dependency>
AntiSamy
AntiSamy to prevent evil hackers from gaining access.<dependency>
<groupId>org.owasp.antisamy</groupId>
<artifactId>antisamy</artifactId>
<version>1.5.3</version>
</dependency>
<groupId>org.owasp.antisamy</groupId>
<artifactId>antisamy</artifactId>
<version>1.5.3</version>
</dependency>
URL Validation
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.4.0</version>
</dependency>
It's amazing to see Maven automatically download all the required libraries.<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.4.0</version>
</dependency>
The last part was adding plantuml back into the mix. But I'll talk about that in the next Blog.
References
- Apache Maven
- http://maven.apache.org/
- Netbeans - MavenBestPractices
- http://wiki.netbeans.org/MavenBestPractices
No comments:
Post a Comment