Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create WAR file from pom.xml for an existing Maven project

I am creating a web project and I was told that it has to reside inside the resources directory of an existing maven project

Here is the structure of the project

MavenProject
  |-- src
  |   |-- main
  |   `-- resources
  |       `-- My-Web-Project
  |           |-- META-INF
  |           |    `-- MANIFEST.MF
  |           |-- src
  |           |   |-- classes
  |           |   |   |-- com
  |           |   |   |   `-- example
  |           |   |   |       `-- projects
  |           |   |   |           `-- SampleAction.class
  |           `-- web
  |               |-- css
  |               |-- css
  |               |-- img
  |               |-- js
  |               |-- WEB-INF
  |               |   `-- web.xml 
  |               |-- index.jsp
  |               `-- secondary.jsp
  |-- test
  `-- pom.xml

As you can see there is already a pom.xml file for the MavenProject. I want to be able to deploy my web project WAR using the current pom.xml.

I want to know if it's possible to do this and how would I proceed to create the Maven Plugin.

I read this article but I don't know if it apply to my situation http://maven.apache.org/plugins/maven-war-plugin/usage.html

EDIT:

I am using tomcat app server.

As Mentioned before, My project "My-Web-Project" should be under "resources"

like image 510
locorecto Avatar asked Dec 26 '22 15:12

locorecto


1 Answers

Read this document, incomplete, but it is good starter.

Using Maven When You Can't Use the Conventions

  • Using maven using non standard directory layout

Sample configuration (not recommended)

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
      <webResources>
        <resource>
          <!-- this is relative to the pom.xml directory -->
          <directory>src/main/resources/My-Web-Project/web</directory>
        </resource>
      </webResources>
    </configuration>
  </plugin>

This is not complete, target and classes shouldn't be located inside source directory.


Maven convention - recommended solution

I was told that it (web project) has to reside inside the resources directory of an existing maven project

This is wrong, web project shouldn't be created inside resources!

Read about Maven Convention over Configuration.

Convention over configuration is a simple concept. Systems, libraries, and frameworks should assume reasonable defaults. Without requiring unnecessary configuration, systems should "just work".

Use convention instead of configuration.

Proper directory structure should looks like this:

MavenProject
   |-- src
   |   |-- main
   |   |   `-- java
   |   |       `-- com
   |   |           `-- example
   |   |               `-- projects
   |   |                   `-- SampleAction.java
   |   `-- resources
   |   |   `-- META-INF
   |   |       `-- MANIFEST.MF
   |   `-- webapp
   |        |-- css
   |        |-- img
   |        |-- js
   |        |-- WEB-INF
   |        |   `-- web.xml
   |        |-- index.jsp
   |        `-- secondary.jsp
   |-- test
   |-- target  // this is generated by maven!
   |   |-- classes
   |   |   `-- com
   |   |       `-- example
   |   |           `-- projects
   |   |               `-- SampleAction.class
   `-- pom.xml

Source: Introduction to the Standard Directory Layout

like image 104
MariuszS Avatar answered Jan 19 '23 00:01

MariuszS