自上一篇文章以来,这一系列教程已经有很长时间了。 是时候恢复并在我们的简单项目中添加新功能了。 正如我在之前的帖子中提到的那样,本系列文章主要针对Maven和JavaEE7新手,我欢迎对以下内容有任何疑问或意见(和修正)。 我保证我会努力跟上更新。
这个帖子的Git标签?
该帖子的标签是post8 ,可以在我的bitbucket存储库中找到。
与以前的帖子相比有什么变化?
- 读者的代码注释和修正已被集成。非常感谢您的来访。
- 我已经将Wildfly应用服务器的版本从8.1更新到8.2,因此所有示例和代码都在新服务器下运行。
- 我还将Arquillian BOM的版本更新为最新版本,即现在的1.1.7。
- 我还在样本父项目下添加了一个属性,该属性指示各种maven模块将自动下载和使用Wildfly服务器的路径,这样您就不必自己下载它。 一旦您尝试执行先前文章中的单元测试之一,服务器将自动下载并提取到预定义的路径(sample-services模块)
<!--path to download wildfly--> <wildfly-server-home>${project.basedir}/servers/</wildfly-server-home>
在我们的耳朵上添加启用了JSF的war Maven模块
最终,我们的项目结构已经出现了战争(请参见示例网站)
Maven模块。 因此,没有引入任何额外的模块,而是对父级和模块本身的现有pom.xml文件进行了更改。
步骤1在web.xml上更改
我们的应用程序服务器已经捆绑了必需的库和设置,以支持使用JSF 2.2规范的应用程序。 Wildfly捆绑了Mojarra 2.2.8 。 我们要做的只是更新一些配置描述符(最终只有一个)。 最重要的是web.xml,现在看起来像这样。
<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">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<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>
<session-config>
<session-timeout>15</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
第2步:打包战争和瘦身的战争问题
我们的战争模块遵循一种称为“瘦身战争”的包装方案。 请从Apache maven war插件阅读以下页面 。 长话短说,为了减小部署能力(耳朵)的整体大小,我们将所有必需的库打包在耳朵级别的预定义文件夹下,通常称为\ lib,并且不包括在下面的库战争的WEB-INF \ lib文件夹。 您唯一需要做的就是将战争的相关性添加到耳边。 尽管事实上整个“ hack”感觉都不是专家,但如果遵循建议的配置,它就可以工作,但是在某些情况下,瘦小的战争包装将无法工作。 其中之一通常用于基于JSF的JavaEE Web应用程序,在该应用程序中,应将JSF小部件引擎的实现打包在战争的WEB-INF \ lib中。
对于我们的示例项目,我正在使用优秀且免费的Primefaces库 ,我强烈建议您将其用于下一个基于JSF的项目。 因此,我需要为primefaces jar定义对war模块的依赖关系,但要通过仅针对此jar的瘦war机制,以便将其打包在正确的位置。 这是我们的做法。
<!-- from the war module pom.xml -->
<!-- This is the dependency -->
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>${primefaces-version}</version>
</dependency>
<!-- See the packaging exclude, we exclude all the jars apart from the one we want
to be bundled within the WAR -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<packagingExcludes>%regex[WEB-INF/lib/(?!primefaces).*.jar]</packagingExcludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>sample-services-${project.version}.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
步骤3添加一些jsf爱,一个托管bean和带有适当标签的xhtml页面。
我们的代码只是一张小桌子,还有几个Primefaces的标签。 如果您认为需要阅读有关JSF 2.X的更多信息,请访问以下链接
步骤4打包并部署到正在运行的服务器。
启动您的wildfly(预计您的项目库目录和子文件夹服务器下应有一个)
<wildfly-server-home>${project.basedir}/servers/</wildfly-server-home>
然后在样本父项目类型下。
mvn clean install -Ph2
您应该在http:// localhost:8080 / sample-web /上具有启用了JSF 2.2的演示应用程序,并看到类似以下内容的内容。
就是这样,这将为您提供一个简单的起点,以便扩展除演示之外的其他功能!
与往常一样,您将在标记post8下找到完整的示例。
翻译自: https://www.javacodegeeks.com/2015/03/java-ee7-and-maven-project-for-newbies-part-8.html