针对新手的Java EE7和Maven项目–第8部分
自上一篇文章以来,这一系列教程已经有很长时间了。 是时候恢复并在我们的简单项目中添加新功能了。 正如我在之前的帖子中提到的那样,本系列文章主要针对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