Playing around with maven
Today I played around with maven while working on a personal project and it turned out to be a great decision.
What I learned
What I learned in the process:
Using maven plugins
Maven plugins can reduce a lot of work when it comes to automating things. I used
maven-assembly-plugin to create an executable jar file, which includes all the resources and dependencies of the project as well.
In my project, I added this part to my plugins:
<plugin><artifactId>maven-assembly-plugin</artifactId><configuration><archive><manifest><mainClass>path.to.MainClass</mainClass><addClasspath>true</addClasspath></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id> <!-- this is used for inheritance merges --><phase>package</phase> <!-- bind to the packaging phase --><goals><goal>single</goal></goals></execution></executions></plugin>
This will generate an executable jar file in the
target folder for you. But, it can be tricky if you are using a local jar file as a dependency.
Using local maven repository
I also learned how to use an existing jar file as a local maven repository.
- Run this command:
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file -Dfile=<jarfilepath> -DgroupId=<groupId> -DartifactId=<artifactId> -Dversion=<version> -Dpackaging=jar -DlocalRepositoryPath=<localRepositoryPath>
- This will create a local repository in the specified location, which you can then add to the pom file directly. This method is preferred way more than using the
systemscope in maven.
Extending a Windows application to Unix-based systems
I was planning to port my Java application built using SWT to other operating systems for a long time. After starting to use Maven as the package manager for my application (I am working on an old project when I wasn’t aware of Maven), I realized how easy that made a developer’s life. Earlier I was importing SWT normally, like this:
Now, for building and running the same app on Linux, I just had to add a new profile to maven, and it would do everything by itself! The updated pom file looks like this:
Looks cool, right? I now understand why maven is so widely accepted and used. I would say that porting to maven was one of the best things I did for my project.