Maven nicely automates building WAR files, but it places your compiled classes in WEB-INF/classes instead of making a new jar in /WEB-INF/lib.
If you want your code to be compiled as a .jar as well as a .war, you can do this by specifying the jar goal in the command line:
[shell>mvn clean jar install
Note this will make myproject.jar in target/, not in target/myproject/WEB-INF/lib, so you will need to use the Ant plugin to move this stuff around.
But this is not always an option: for deep, modular builds using the reactor, you may want to build your whole thing using one “mvn install”. To do this, do the following:
- Specify “war” packaging at the top of your pom.xml.
- Then add the following to your build section.
<?xml version="1.0" encoding="UTF-8"?> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <executions> <execution> <id>make-a-jar</id> <phase>compile</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
And that’s it. Do a “maven install” and you get both a jar as well as a war.