Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


advertisement
 

Apache Maven Simplifies the Java Build Process—Even More Than Ant : Page 3

Apache Maven's reuse mechanisms simplify the build process and generally improve upon the popular Ant tool's functionality. In fact, developer and Java technology trainer Dave Ford believes Maven could very well replace Ant as your preferred Java build tool.


advertisement
Integrate Unit Testing
Unless automated unit testing is cleanly integrated into the build process, developers tend to skip it. Maven eliminates any excuses for not testing by making it easy. All you have to do is tell Maven where your test classes are. Here are the steps:
  1. In project.xml, add the unitTestSourceDirectory element directly below the sourceDirectory element:

    ... </sourceDirectory> <unitTestSourceDirectory> ${basedir}/src/test </unitTestSourceDirectory> ...

  2. Create a test case called BoxTest:

    File name:

    c:\daven\src\java\smartsoft\daven\BoxTest.java

    Content:

    package smartsoft.daven; import junit.framework.TestCase; public class BoxTest extends TestCase{ public void test1(){ Box b = new Box(2,2); assertEquals(4,b.getArea()); } }

  3. Run the java:jar goal again, which indirectly calls the test:compile and test:test goals:


    maven java:jar

The console output should look like this:

C:\daven> maven jar java:prepare-filesystem: java:compile: [echo] Compiling to C:\daven/target/classes java:jar-resources: test:prepare-filesystem: test:test-resources: test:compile: [javac] Compiling 1 source file to C:\daven\target\test-classes test:test: [junit] dir attribute ignored if running same VM [junit] Running smartsoft.daven.BoxTest [junit] Tests run: 1, Failures: 0, Errors: 0 BUILD SUCCESSFUL Total time: 10 seconds

If any tests failed, you can look at the generated test reports in the directory targets/test-reports.

Maven's Repository Organizes Jar Files
Most projects use third-party libraries in the form of jar files. The repository is a special Maven mechanism for organizing the jar files and other dependencies that your builds use. (Maven also uses the term artifact to refer to dependencies.) The repository essentially is a folder with a Maven-specified structure, and it solves two problems. First, it provides a central location for all the jar files and other build dependencies you need to build your projects. Second, it helps deal with version issues by proposing a naming convention. The following is the structure of a Maven repository:

<USER_HOME>/repository jdo jars kodo-1.1.jar kodo-1.2.jar jdoInterfaces-1.0.jar filters jars jxFilter-1.0.jar jxFilter-1.1.jar

Or, more generally:

<USER_HOME>/repository/groupId/type/artifactId-version.ext

Thus, for kodo-1.1.jar, jdo is the groupId, jar is the type of dependency, kodo is the artifactId, and 1.1 is the version. These elements will be represented in your POM.

Maven supports a local repository and a shared network repository. It first checks the local repository, and if it doesn't find the jar file, it checks the shared repository. Maven caches jar files from the shared directory in the local directory.

Determining Project Dependencies
Maven's repository feature is closely related to the way Maven deals with project dependencies. In Ant, you have to create a classpath to indicate which jar files your project depends on, while Maven uses the dependencies element in project.xml for that purpose.

Add a jar file dependency to your project to see how this works. Add the following block of code to project.xml, below the currentVersion element but above the build element:

... <currentVersion>1.0</currentVersion> <dependencies> <dependency> <groupId>jdo</groupId> <artifactId>kodo</artifactId> <version>2.5.2</version> </dependency> </dependencies> <build> ...

In order for this tag to work, the following jar file must exist:

<USER_HOME>/repository/jdo/jars/kodo-2.5.2.jar

Multiple goals use the dependency tag. For example, the compile goal uses it to generate the classpath, and the deploy goal uses it to determine which jar files to copy.



Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap