JavaEE7和Maven工程入门(4)-Java开发Java经验技巧_第1页
JavaEE7和Maven工程入门(4)-Java开发Java经验技巧_第2页
JavaEE7和Maven工程入门(4)-Java开发Java经验技巧_第3页
JavaEE7和Maven工程入门(4)-Java开发Java经验技巧_第4页
JavaEE7和Maven工程入门(4)-Java开发Java经验技巧_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、java ee7和maven工程入门(4)-编程 开发技术java ee7 和 maven i程入门(4)木文由importnewmathshelly翻译自javacodegeekso欢迎加入翻译小纽转载请见文末 要求。目录1. 一个简单maven工程的结构2. 建立一个简单的war工程3. 定义ejb services模块和jpa实体模块4. 定义ear模块5. 使用arquillian iit彳亍单元测试(上)6. 使用arquillian进行单元测试(下)7. 使用 postagresql 与 shrinkwrap api 进行测试我们现在开始第四部分。目前我们的简单工程包含了:1. 个

2、 web maven 模块(war)2. 一个支持无状态会话beans的ejb模块(ejb3. 1)3. 支持实体beans的ejb模块(jpa2)但是,我们仍然缺少把它们打包到一起的存档文件,即'ear,类型(亦称企业 存档)。定义ear maven模块在下图可以看到,我们在sample-parent下定义了一个空文件夹,叫做 sample-earo这个文件夹需要有一个pom. xml文件。我们的新模块需要被 sample-parentpom. xml 的"modules” 部分正确引用。ear maven模块的主要目的是为了 “配置”著名的maven-ear插件,这个插件

3、将 会被maven引用,并冃用来生成我们最后的部署应用程序。有两件简单的事情需要做:为maven-ear插件增加配置和在ear模块增加我们的 “内部”应用依赖关系,以便让它“知道”应该寻找哪个模块。我们来看一看:ear pom. xml 内容<build>finalname>sampleapp</finalname><plugins><!-ear plugin -creating the ear - watch out skinny wars!-> <plugin><groupld>org. apache, mave

4、n, plugins</groupld><art i fact t d>mavenear-plugi n/arti facttd> <configuration><f inalname>sampleapp</finalname> <defaultjavabundledir>lib/</defaultjavabundledir> <skinnywars>true</skinnywars><modules><wcbmodulc><groupld>gr

5、. javapapo</groupld> <artifactid>sample-web</artifactid> </webmodule><ejbmodule><groupld>gr. javapapo</groupld> <artifactld>sample-services</artifactld> </ejbmodule></modules></configurati on></plugin></plugins>/bu订d

6、>上面是创建过程,下面是需耍注意的地方:记得我们在另一个模块中的做法。我们已经为插件定义了一些常用的慕木配置,在 “父”pom中。可以冋顾一下那里已经做好的配置。注意44defaultjavabundledir9这是我们所有库定义的地方(除了包含c如的顶层模 块,通常也包会含ear的,lib,子文件夹)。什么是顶层模块?它实际上是,将会打包在eai屮的jar包和wars包,而且将会被 看成是一等公民。正如你知道的,我们定义了两个顶层模块,sample-web sample-services o注意kinnywars'm性。当该属性启用吋,我们会对war项目中引用的第三方库打 包吋

7、执行一个确定的模型。简单来说,我们的war档案不会包含任何web-inrlib 文件夹屮定义依赖的外部函数库。和这些libs相反,它们将在ear级9 defaultja vabundledir(路径上打包。如果不添加ear-pom的“依赖关系”,上述的配置无法工作。<!- our in app dcpcndcncics-><dependencies><dependency><grouptd>gr. javapapo</grouptd><artifactid>sample-web</artifactid><

8、vcrsion>$project version</vcrsion><type>war</type>/dependency<dependency><groupld>gr. javapapo</groupld><ar ti factld>saniple-services/ar ti factld> <version>$project, version</version> <type>ejb</type></dependency></dc

9、pcndcncics>请注意下面内容: 在这个pom上的依赖元索,需要“type”属性。一个很好的问题:samp 1 e-domain ( jar)模块在哪里?好吧,这个模块在ear中不会提升为顶级模块。因为我们将会把作为 sample-services模块的一个依赖关系,所以我们的services将在实体beans 模块拥有一个依赖关系(听起来很公平)。因此需要更新sample-services模块 的 pom. xmlo<artifactld>sample-services</artifactld>name>sample_services</nam

10、e><dcscription>ejb service laycr</description><packaging>ejb</packaging>dependencies<dependency><grouptd>javax</grouptd><artifactid>javaccapi</artifoetid</dependency>dependency<groupld>gr. javapapo</groupld><arti facttd>sa

11、mple_domai n/arti facttd> <vcrsion>$project, vcrsion</vcrsion></dependency>/dependencies</project>这样,sample-services, jar 会和 sample-domain, jar 一起被"获取(fetch) ”。 默认情况卜.(记住maven都是约定),当我们给一个car定义一个顶级模块,像 sample-services,它的依赖关系在ear的defaultjavabundledir库屮是自动绑 定的!所以,当我们打包ea

12、r时,将会看到打包的sample-domain. jaro再次失踪的依赖关系在第一个services模块和实体模块的应用依赖关系z后,我们还需要另外一个 依赖关系。我们的war模块(web层面)将会用到一些services。为了做到这一 点,需要在"services”模块有一个依赖关系。所以相应的,在sample-web项 目上需要pom. xmlo<packaging>war</packaging><build>finalname>$project, artifactld)</finalname></build>&l

13、t;dcpcndcncics><dependency><groupld>javax</groupld><artifactld>javaee-api</artifactld><scope>provi ded</scope></dcpcndcncy><dependency><groupld>gr. javapapo</groupld><artifactld>sample-services</artifactld><version&g

14、t;0. 0 1-snapshot/version</dcpcndcncy></dependencies>让我们来打包war吧现在我们准备好了。基本的依赖关系都设置好了,ear c经配置,我们只需要打 包了。在sample-parent文件夹下,只需在命令行输入:mvn clean package我们就完成了。让我们检查一下sample-ear模块的'target?文件夹,最终的 ear已经生成了。maven述在ear 创建了' exploded'版木,(下图是放大版 本)。请注意,我们的两个顶级ear元索,以及sample-domain, ja

15、r是如何在 ear的lib,文件夹卜的。同时还需要注意一些基本的库,像javace-api. jar, 并没冇包含在lib文件夹下。既然我们已经添加了规定的“pom”(见xml的最 终版本)。最后的工作:skinny war和manifest. mf文件最后,我们可以在这里结束。最后的car是对的并且可以工作了,但是和所有上 述的配置一起,特别是根据我们的喜好的设置来创建skinny war so需要注意的 一个细节:manifest文件是jar和war中的特殊描述符。应用服务器通过 manifest文件定位和加载classpath上“依赖”的jar包。冇一个小问题存在于sample-web.

16、 war的manifest. mf文件中°解压已生成的war 文件,用文本编辑器打开manifest. mf,会看到类似卜面的内容:manifest-version: 1.0bu订t-by: papobuild-jdk: 1.7. 0_45class-path: 1 ib/sample-services-o. 0. 1-snapsi10t. jarlib/samplc-scrviccs-o. 0 1-snapshot.jar lib/samp1e-domain0. 0. 1-snapshot, jarcreated-by: apache maven 3. 2. 1archiver-v

17、ersion: plexus archiver你能找到错误吗?默认生成的manifest. mf中,顶级ejb jars(sample-services)指向了一个错误路径。我们的 sample-services, jar 并没 有放在ear屮的lib下,而是一个顶级元索。所以,怎样创建一个正确的manifest 呢?最后,我们需要微调一下maven-war插件。我们需要在父pom屮覆盖指定的默认 行为,并为这个特殊的依赖关系指定一个正确项。如果碰巧冇多个,那么需要为 所有的在配置中的顶级元素的jeirs添加(请确保你止确的做了这一点,在条目 z间使用一个空格)。所以,在sample-war pom中,我们需要在一个应用的顶 层增加一些(额外的)配置。在stackoverflow 有一个有趣的问题。如果使用skinny-wars的话,你可以从 这里了解更多的小窍门或者其他可能的解决方法。就是这样,ear模块已经准备就绪。总结点击这个git tag可以看到这篇文章的最终版。到这篇文章为止,我们已经完成 t第一个系列的文章

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论