Home » Java » Enterprise Java » Creating JSF/CDI Maven project on Eclipse

About Belal Galal

Belal Galal
Belal is a full stack Java EE Developer with a good grasp of key skills like Analysis, Architecture and System Administration. He worked in different scale projects in a variety of domains such as inventory management, aerospace, finance, banking and telecom.

Creating JSF/CDI Maven project on Eclipse

While I was working on a JSF and CDI example, I thought it would be useful to mention the steps required to create JSF and CDI Maven project. You can find the bellow steps to do so.

Tools

  • Eclipse Luna that’s shipped with the M2E plugin by default. So no need to install the plugin yourself.
  • WildFlye 8.x.

 
 

  1. Select from the main menu File->New->Other. Then select Maven->Maven Project.

    1-Creating JSF CDI Maven Project

  2. Click the Next button and then check “Create a simple project (skip archetype selection)”.

    2-Creating JSF CDI Maven Project

  3. Write the Group Id and the Artifact Id then select Packaging as WAR.

    3-Creating JSF CDI Maven Project

  4. Click the Finish button to create the project with the bellow structure displayed in the Navigator view.

    4-Creating JSF CDI Maven Project

  5. As you can see there is no deployment descriptor file (web.xml) as there is no WEB-INF folder. Also by checking on the Project Facets (select the project then ALT+ENTER then choose from the left menu Project Facets), we can see that the version of the Dynamic Web Module is 2.5 and the JavaServer Faces is not selected. So it’s time to do some configurations to our project.

    5-Creating JSF CDI Maven Project

  6. Right click on the project name then Configure->Add JSF Capabilities. This will configure the project as JSF project and adds the WEB-INF with the web.xml and the faces-config.xml.

    7-Creating JSF CDI Maven Project

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5">
     <display-name>JSFCDIMavenProject</display-name>
     <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>/faces/*</url-pattern>
     </servlet-mapping>
    </web-app>
    <?xml version="1.0" encoding="UTF-8"?>
    <faces-config
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
        version="2.2">
    
    </faces-config>
  7. Adding the necessary API’s as dependencies to the pom.xml. Also, adding the maven-compiler-plugin with version 3.1. I have also pointed maven to use the Java compiler version 1.7. So here is the final pom.xml.
    <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.ithinkisink</groupId>
     <artifactId>JSFCDIMavenProject</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <packaging>war</packaging>
    
     <name>JSFCDIMavenProject Maven Webapp</name>
    
     <dependencies>
      <dependency>
       <groupId>javax.inject</groupId>
       <artifactId>javax.inject</artifactId>
       <version>1</version>
       <scope>provided</scope>
      </dependency>
      <dependency>
       <groupId>javax.faces</groupId>
       <artifactId>jsf-api</artifactId>
       <version>2.1</version>
       <scope>provided</scope>
      </dependency>
      <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>javax.servlet-api</artifactId>
       <version>3.1.0</version>
       <scope>provided</scope>
      </dependency>
      <dependency>
       <groupId>javax.enterprise</groupId>
       <artifactId>cdi-api</artifactId>
       <version>1.0</version>
       <scope>provided</scope>
      </dependency>
     </dependencies>
     <build>
      <finalName>JSFCDIMavenProject</finalName>
      <plugins>
       <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
         <source>1.7</source>
         <target>1.7</target>
        </configuration>
       </plugin>
      </plugins>
     </build>
    </project>
  8. Now right click on the project name then choose Maven->Update Project to update the project with the newly added configurations.
  9. The deployment descriptor (web,xml) has version 2.5 and we are pointing to the servlet 3.1 in our dependency. So as per Java EE 7XML schema, the namespace is changed to be http://xmlns.jcp.org/xml/ns/javaee/. This is the final web.xml after applying that change.
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">
     <display-name>JSFCDIMavenProject</display-name>
     <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>/faces/*</url-pattern>
     </servlet-mapping>
    </web-app>
  10. Check again the Project Facets. You can change the Dynamic Web Module for the version 3.1 and the JavaServer Faces is checked with version 2.2 as per the version added in the dependencies.

    6-Creating JSF CDI Maven Project

  11. The last configuration that is needed is enabling the CDI context. This could be done by creating an XML file named beans.xml and add it to the WEB-INF folder as the bellow one.
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
      http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
           bean-discovery-mode="all">
    </beans>

    8-Creating JSF CDI Maven Project

  12. Finally adding the project to WildFly and then starting the server. You will see in the Console view that WildFly started a service for the CDI deployment to the application.

    9-Creating JSF CDI Maven Project

I have pushed this stub project to my GitHub and you can find it through the bellow URL.

Reference: Creating JSF/CDI Maven project on Eclipse from our JCG partner Belal Galal at the I think, I sink! blog.
(0 rating, 0 votes)
You need to be a registered member to rate this.
2 Comments Views Tweet it!
Do you want to know how to develop your skillset to become a Java Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. JPA Mini Book
2. JVM Troubleshooting Guide
3. JUnit Tutorial for Unit Testing
4. Java Annotations Tutorial
5. Java Interview Questions
6. Spring Interview Questions
7. Android UI Design
and many more ....
I agree to the Terms and Privacy Policy

2
Leave a Reply

avatar
2 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
MaheshIndranil Sharma Recent comment authors

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
newest oldest most voted
Notify of
Indranil Sharma
Guest
Indranil Sharma

Hi ,
After executes i am getting this error .could you please look on it

Servlet [Faces Servlet] in web application [/Demo] threw load() exception
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet

Mahesh
Guest
Mahesh

I already have maven project – using Hibernate/JPA and EJB 3. While am able to test and execute the APIs/classes I have written, now I want to add JSF capabilities to the existing project. How can I add JSF capabilities in Eclipse and maven pom.xml so that I can create web pages in JSF and use the service APIs?