The top level directory
The top directory layout is as follows:xyz
xyz-common
xyz-ear
xyz-ejb
xyz-web
pom.xml
The file pom.xml is the following:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo.xyz</groupId>
<artifactId>xyz</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<name>xyzmaven</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<env>dev</env>
</properties>
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>prd</id>
<properties>
<env>prd</env>
</properties>
</profile>
</profiles>
<modules>
<module>xyz-common</module>
<module>xyz-web</module>
<module>xyz-ejb</module>
<module>xyz-ear</module>
</modules>
</project>
In this top directory, run "mvn clean install" will build and install all the modules. One can also go to each individual module to run "mvn clean install".
xyz-common
This is a jar module that contains common classes used by other modules.Its content layout:
src
main
java
test
java
pom.xml
The file pom.xml is as follows.
<?xml version="1.0" encoding="UTF-8"?>
<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>xyz</artifactId>
<groupId>com.foo.xyz</groupId>
<version>1.0</version>
</parent>
<artifactId>xyz-common</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>xyz-common</name>
<build>
<plugins>
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.5</version>
</dependency>
</dependencies>
</project>
Notes:
- The test files are skipped.
- The goal "test-jar" will generate xyz-common-1.0-tests.jar
xyz-ejb
This is the ejb module. The file structure is the following.src
main
java
resources
META-INF
ejb-jar.xml
weblogic-ejb-jar.xml
pom.xml
The file pom.xml is as the following:
<?xml version="1.0" encoding="UTF-8"?>
<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>xyz</artifactId>
<groupId>com.foo.xyz</groupId>
<version>1.0</version>
</parent>
<artifactId>xyz-ejb</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>xyz-ejb Maven Webapp</name>
<build>
<!-- <finalName>xyz-ejb</finalName> -->
<plugins>
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.3</version>
<configuration>
<ejbVersion>2.1</ejbVersion>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.foo.xyz</groupId>
<artifactId>xyz-common</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Notes:- Just run "mvn clean package" will create the xyz-ejb-1.0.jar. It seems that you do not
need to run "mvn ejb:ejb". - In this example, the ejb version used is the old 2.1 version.
After xyz-ejb-1.0.jar is built successfully, its file layout is as follows:
com META-INF ejb-jar.xml weblogic-ejb-jar.xml
xyz-web
This is the web module. The file structure as follows.src
main
filters
filter-dev.properties
filter-prd.properties
java
resources
views.properties
messages.properties
webapp
some_jsp_folder
WEB-INF
flows
jsp
other_folders
tld
faces-config.xml
web.xml
weblogic.xml
xyz-servlet.xml
pom.xml
The file pom.xml is as follows.
<?xml version="1.0" encoding="UTF-8"?>
<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>xyz</artifactId>
<groupId>com.foo.xyz</groupId>
<version>1.0</version>
</parent>
<artifactId>xyz-web</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<name>xyz-web Maven Webapp</name>
<build>
<!-- <finalName>xyz</finalName> -->
<filters>
<filter>${basedir}/src/main/filters/filter-${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<webResources>
<resource>
<directory>${basedir}/src/main/webapp/WEB-INF</directory>
<filtering>true</filtering>
<targetPath>WEB-INF</targetPath>
<includes>
<include>xyz-servlet.xml</include>
<include>web.xml</include>
<include>jsp/css/xp.css</include>
<include>jsp/shared/header_jsf.jsp</include>
<include>jsp/shared/mainTemplate.xhtml</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/webapp</directory>
<filtering>true</filtering>
<includes>
<include>fooDir/foo.xhtml</include>
<include>css/xp.css</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>icefaces.icefaces-facelets</groupId>
<artifactId>icefaces-facelets</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>icefaces.icefaces-comps</groupId>
<artifactId>icefaces-comps</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
</project>
Notes:
- One important thing is how to filter files. Here maven-war-plugin is used.
After xyz-web-1.0.jar is built successfully, its file layout is as follows:
some_jsp_folder
WEB-INF
classes
messages.properties
views.properties
flows
jsp
other_folders
tld
lib
icefaces-facelets-1.6.2
icefaces-comps-1.6.2.jar
web.xml
xyz-servlet.xml
weblogic.xml
faces-config.xml
xyz-ear
This is the ear module that is the final product to be deployed. Its file structure is as follows:
src
main
application
APP-INF
classes
hibernate
foo.hbm.xml
spring
xyzContext.xml
log4j.properties
META-INF
application.xml
filters
filter-dev.properties
java
pom.xml
The file pom.xml is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<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>xyz</artifactId>
<groupId>com.foo.xyz</groupId>
<version>1.0</version>
</parent>
<artifactId>xyz-ear</artifactId>
<packaging>ear</packaging>
<version>1.0</version>
<name>xyz-ear</name>
<build>
<finalName>xyz</finalName>
<filters>
<filter>${basedir}/src/main/filters/filter-${env}.properties</filter>
</filters>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.4.2</version>
<!-- configuring the ear plugin -->
<configuration>
<filtering>true</filtering>
<defaultLibBundleDir>APP-INF/lib</defaultLibBundleDir>
<modules>
<webModule>
<groupId>com.foo.xyz</groupId>
<artifactId>xyz-web</artifactId>
</webModule>
<ejbModule>
<groupId>com.foo.xyz</groupId>
<artifactId>xyz-ejb</artifactId>
</ejbModule>
<jarModule>
<groupId>weblogic</groupId>
<artifactId>weblogic</artifactId>
<excluded>true</excluded>
</jarModule>
</modules>
</configuration>
</plugin>
<plugin>
<groupId>scm.plugins</groupId>
<artifactId>scm-wls-plugin</artifactId>
<configuration>
<deployName>xyz</deployName>
<deploymentName>xyzWLdeploy</deploymentName>
<artifactPath>C:\workshop\xyz\mavenxyz\xyz-ear\target\xyz.ear</artifactPath>
<adminServerHostName>localhost</adminServerHostName>
<adminServerPort>7001</adminServerPort>
<adminServerProtocol>t3</adminServerProtocol>
<userId>weblogic</userId>
<password>weblogic1</password>
<targetNames>xyzAdminServer</targetNames>
<verbose>false</verbose>
<debug>false</debug>
<upload>true</upload>
<remote>true</remote>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- web and ejb modules -->
<dependency>
<groupId>com.foo.xyz</groupId>
<artifactId>xyz-ejb</artifactId>
<version>1.0</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>com.foo.xyz</groupId>
<artifactId>xyz-web</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
<dependency>
<groupId>com.foo.xyz</groupId>
<artifactId>xyz-common-test</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
<version>2.7.6</version>
</dependency>
</dependencies>
</project>
The file application.xml is the following:
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.4">
<display-name>XYZ</display-name>
<module>
<ejb>xyz-ejb-1.0.jar</ejb>
</module>
<module>
<web>
<web-uri>xyz-web-1.0.war</web-uri>
<context-root>xyz</context-root>
</web>
</module>
</application>
Notes:- The scm-wls-plugin plugin in the pom is a customer-made plugin.
- The generated ear will contain all the dependent jars in the xyz-common module and put them into the directory APP-INF/lib. If you do not want some of them to be included, use "<excluded>true</excluded>" in the jarModule as is the case for weblogic.jar in the above pom file.
- If additional jars are needed for the ear, just add them in <dependencies>.
- By configuing filtering to be true in the maven-ear-plugin, it will filter files in the
application directory.
After the ear is built successfully, the exploded ear has the following file structure.
xyz
APP-INF
classes
hibernate
foo.hbm.xml
spring
xyzContext.xml
log4j.properties
lib
antlr-2.7.6.jar
other_jars from the xyz-common dependencies
META-INF
application.xml
xyz-ejb-1.0.jar
xyz-web-1.0.war
