I downloaded struts-examples-master.zip from https://github.com/apache/struts-examples. Unzip it and run mvn.
# mvn -version Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T11:41:47-05:00) Maven home: /home/alkao/maven/apache-maven-3.3.9 Java version: 1.8.0_131, vendor: Oracle Corporation Java home: /home/alkao/jdk/jdk1.8.0_131/jre Default locale: en_CA, platform encoding: UTF-8 OS name: "linux", version: "4.4.0-21-generic", arch: "i386", family: "unix" $ mvn -e clean package [INFO] Error stacktraces are turned on. [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for org.apache.struts:annotations:war:1.0.0 [WARNING] The expression ${artifactId} is deprecated. Please use ${project.artifactId} instead. [WARNING] ... [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] ... [INFO] Building Action chaining 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.3/maven-compiler-plugin-3.3.pom Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.3/maven-compiler-plugin-3.3.pom (12 KB at 21.7 KB/sec) Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/27/maven-plugins-27.pom Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/27/maven-plugins-27.pom (0 B at 0.0 KB/sec) Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/26/maven-parent-26.pom Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/26/maven-parent-26.pom (0 B at 0.0 KB/sec) Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.3/maven-compiler-plugin-3.3.jar Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.3/maven-compiler-plugin-3.3.jar (46 KB at 415.4 KB/sec) Downloading: https://repository.apache.org/content/groups/public/org/apache/struts/struts2-core/2.5.12/struts2-core-2.5.12.pom Downloaded: https://repository.apache.org/content/groups/public/org/apache/struts/struts2-core/2.5.12/struts2-core-2.5.12.pom (17 KB at 30.1 KB/sec) ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS ... Copy hello-world.war to Apache TomEE: # cp helloworld/target/hello-world.war $CATALINA_HOME/webapps/. In a browser accessing URL: http://localhost:8080/hello-world/index.jsp which display: "Welcome To Struts 2! Hello World" Then clicking the 'Hello World' link got the url: http://localhost:8080/hello-world/hello.action;jsessionid=8EEA47306A76BAE87F665C6090D518E3 which display: HTTP Status 500 - Filter execution threw an exception type Exception report message Filter execution threw an exception description The server encountered an internal error that prevented it from fulfilling this request. exception javax.servlet.ServletException: Filter execution threw an exception root cause java.lang.NoSuchMethodError: org.apache.commons.lang3.reflect.MethodUtils.getAnnotation(Ljava/lang/reflect/Method;Ljava/lang/Class;ZZ)Ljava/lang/annotation/Annotation; org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:47) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.doIntercept(ConversionErrorInterceptor.java:139) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:134) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:134) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:199) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:69) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:115) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:88) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:246) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:99) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:139) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:157) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:174) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) org.apache.struts2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:123) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:171) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:201) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:193) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) org.apache.struts2.factory.StrutsActionProxy.execute(StrutsActionProxy.java:53) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:577) org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:81) org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:143) note The full stack trace of the root cause is available in the Apache Tomcat (TomEE)/8.5.11 (7.0.3) logs. Apache Tomcat (TomEE)/8.5.11 (7.0.3)