The right approach of organizing an enterprise Project is to create a multi module Project.
Pom project (top level project that would define all of the modules)
- war project (project-web)
- jar project (project-services)
- jar project (project-common, contains common stuff eg. vo's)
- jar project (project-framework, Exception, Security, Logging, Error codes, Encryption)
- jar project (project-persistence)
- jar project (project-module)
- war project (project-web-services, depends upon 'project-services')
- jar project (project-report, reporting stuff)
- jar project(project-standalone for cron Jobs, depends upon 'project-service
Reasons for using Multi-Module projects :
- Modulerising related source code: client/web, controller, services, UI,.
- Deploy only the changes:With multi-module projects, we can regenerate your project and deploy only what changed.
- Allowing Versioning of diffrenet modules
- Relase ont module which is modified
- Spliting your project into multiple maven projects if your projects are deployed in different configurations.
- Reuse of sertainn comon modules:Let's assume your project contains some well-written generic-enough code for mail sending. If you later have another project that need mail sending functionality, you can simply re-use your existing module or build upon it (in another module by adding it as a dependency).
- Easier maintainability on the long run. Maybe now it seems like a small project.
- Conceptual clarity
Sample Example:
Pom.xml for Parent Project:
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>TechyHouse</artifactId>
<groupId>org.techyhouse</groupId>
<version>1.1.0-SNAPSHOT</version>
</parent>
<groupId>org.techyhouse</groupId>
<artifactId>techyhouse-web</artifactId>
<version>1.1.0-SNAPSHOT</version>
<name>techyhouse-web</name>
<packaging>war</packaging>
<url>http://maven.apache.org</url>
<properties>
<java-version>1.6</java-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.0.6.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.techyhouse</groupId>
<artifactId>techyhouse-service</artifactId>
<version>1.1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>techyhouse-web</finalName>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<!-- this is relative to the pom.xml directory -->
<directory>src/main/techyhouse</directory>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
</project>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>TechyHouse</artifactId>
<groupId>org.techyhouse</groupId>
<version>1.1.0-SNAPSHOT</version>
</parent>
<groupId>org.techyhouse</groupId>
<artifactId>techyhouse-web</artifactId>
<version>1.1.0-SNAPSHOT</version>
<name>techyhouse-web</name>
<packaging>war</packaging>
<url>http://maven.apache.org</url>
<properties>
<java-version>1.6</java-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.0.6.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.techyhouse</groupId>
<artifactId>techyhouse-service</artifactId>
<version>1.1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>techyhouse-web</finalName>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<!-- this is relative to the pom.xml directory -->
<directory>src/main/techyhouse</directory>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
</project>
Pom.xml for child module
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>TechyHouse</artifactId>
<groupId>org.techyhouse</groupId>
<version>1.1.0-SNAPSHOT</version>
</parent>
<groupId>org.techyhouse</groupId>
<artifactId>techyhouse-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>techyhouse-service</name>
<url>http://maven.apache.org</url>
<build>
<finalName>techyhouse-service</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-orgpiler-plugin</artifactId>
<version>2.3.2</version>
<inherited>true</inherited>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.8</version>
<configuration>
<links>
<link>http://java.sun.org/javase/6/docs/api/</link>
</links>
<detectOfflineLinks />
<aggregate>true</aggregate>
<doclet>org.umlgraph.doclet.UmlGraphDoc</doclet>
<docletArtifact>
<groupId>org.umlgraph</groupId>
<artifactId>doclet</artifactId>
<version>5.1</version>
</docletArtifact>
<additionalparam>-operations</additionalparam>
<additionalparam>-qualify</additionalparam>
<additionalparam>-types</additionalparam>
<additionalparam>-visibility</additionalparam>
<additionalparam>-collpackages</additionalparam>
<additionalparam>-views</additionalparam>
<useStandardDocletOptions>true</useStandardDocletOptions>
<show>private</show>
</configuration>
</plugin>
<plugin>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.6</version>
<!-- TODO: choose appropriate rulesets -->
<configuration>
<targetJdk>1.6</targetJdk>
</configuration>
</plugin>
</plugins>
</reporting>
<properties>
<java-version>1.6</java-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.1.0.RELEASE</spring.version>
<log4j.version>1.2.16</log4j.version>
<junit.version>4.10</junit.version>
<aspectj.version>1.6.11</aspectj.version>
</properties>
<dependencies>
<dependency>
...............
................
...............
</dependency>
</dependencies>
</project>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>TechyHouse</artifactId>
<groupId>org.techyhouse</groupId>
<version>1.1.0-SNAPSHOT</version>
</parent>
<groupId>org.techyhouse</groupId>
<artifactId>techyhouse-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>techyhouse-service</name>
<url>http://maven.apache.org</url>
<build>
<finalName>techyhouse-service</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-orgpiler-plugin</artifactId>
<version>2.3.2</version>
<inherited>true</inherited>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.8</version>
<configuration>
<links>
<link>http://java.sun.org/javase/6/docs/api/</link>
</links>
<detectOfflineLinks />
<aggregate>true</aggregate>
<doclet>org.umlgraph.doclet.UmlGraphDoc</doclet>
<docletArtifact>
<groupId>org.umlgraph</groupId>
<artifactId>doclet</artifactId>
<version>5.1</version>
</docletArtifact>
<additionalparam>-operations</additionalparam>
<additionalparam>-qualify</additionalparam>
<additionalparam>-types</additionalparam>
<additionalparam>-visibility</additionalparam>
<additionalparam>-collpackages</additionalparam>
<additionalparam>-views</additionalparam>
<useStandardDocletOptions>true</useStandardDocletOptions>
<show>private</show>
</configuration>
</plugin>
<plugin>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.6</version>
<!-- TODO: choose appropriate rulesets -->
<configuration>
<targetJdk>1.6</targetJdk>
</configuration>
</plugin>
</plugins>
</reporting>
<properties>
<java-version>1.6</java-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.1.0.RELEASE</spring.version>
<log4j.version>1.2.16</log4j.version>
<junit.version>4.10</junit.version>
<aspectj.version>1.6.11</aspectj.version>
</properties>
<dependencies>
<dependency>
...............
................
...............
</dependency>
</dependencies>
</project>
No comments:
Post a Comment