从第一部分恢复
第1部分
我们刚刚定义了父 pom。 一种特殊的pom类型,它最终定义了我们的应用程序将要使用的库。 它还配置了所有用于打包我们应用程序每个模块的Maven工具。 您可以在此处 签出 -1部分示例代码。
因此,到目前为止,在将要开发应用程序的目录中,只有一个名为sample-parent的文件夹,并且该目录中存放有pom.xml 。 我们的父母pom!
正如我们在模块部分中所看到的,我们已经定义了应用程序的构建块
- 样品耳
- 样本网
- 样品服务
- 样本域
我们需要创建相关的Maven模块,并为每个模块添加特定的pom.xml文件。
定义战争模块
在sample-parent文件夹下,我们创建了一个名为sample-web的子文件夹,并且还添加了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><parent><groupId>gr.javapapo</groupId><artifactId>sample-parent</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>sample-web</artifactId></project>
但是,这仅仅是什么,我们需要更具体地说明此pom将帮助我们构建什么,因此我们需要定义包装类型,模块名称(针对此战争)以及任何依赖项。
...<artifactId>sample-web</artifactId><packaging>war</packaging><build><finalName>${project.artifactId}</finalName></build><dependencies><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><scope>provided</scope></dependency></dependencies></project>
如果您使用的是支持Maven的IDE(例如Eclipse ),它将自动检测pom内容的更改,并会自动为您创建符合Maven War包装的文件夹。 它将为您创建以下结构。 当然,您可以自己做,但是很方便!
样本网
- src
- 主要
- Java(在此处添加您的Java代码)
- webapp(这是放置WEB-INF \ web.xml的位置)
- 资源(资源,如属性)
- 测试
- Java
- 资源
- 主要
在webapp子文件夹下,我已经预创建了\ WEB-INF \ web.xml文件。 我可以跳过这一部分,因为Maven插件可以为我们做这件事,但只是为了说明这种情况,在某些情况下您想自己创建和创建任何自定义条目
如果您想知道如何“放入”一个空的Servlet 3.1 web.xml文件,请在此处查看 ,或下载此文章的代码。 我还在一个简单的包下的java子文件夹中添加了一个非常简单的Servlet,它将包含在我们的应用程序中。 只需几行代码。 同样,您可以在帖子末尾下载相关git(bitbucket)链接中的所有代码。
因此,我们在war模块pom文件中仅添加了几行,然后在拥有IDE的情况下,该工具神奇地为我们创建了非常特定的文件夹布局。 我们已“遵循”此布局,并添加了一个非常简单的servlet java类和一个小的xml描述符。 这里的真正意义是什么?
好吧,关于Maven的好处是,我们的War模块需要构建的一些东西已经在“特殊”父pom中定义和配置了。 但是这些东西是什么,以及Maven将如何使用它? 正如我们已经阐述的那样,Maven完全是关于约定的。 您以“正确”的方式放置正确的事物,然后它将为您完成所有工作。
因此,当行家扫描这个战争包装的pom时,它将需要
- 编译我们的java类,它是一个servlet
- 并将sample-web文件夹下的所有内容打包到war文件和所有依赖项中。
谁将做所有这些事情,因为我们没有在战争pom中添加任何特别的东西(除了一个依赖库之外)。 好吧,这是配置或我们的父pom(请参阅上一篇文章)。
为了编译我们的源代码,将“调用” maven-compiler-plugin ,并且由于我们已经定义了maven模块的打包为“ war”,因此将调用maven-war-plugin将所有内容打包为我们,创建适当的描述符。
因此,在我们的应用程序可能具有多个war或jar模块的情况下,如果我们有一个父pom,并且在一个中央位置定义了插件和基本配置,则我们不必在所有或我们中重新定义它war / jar pom(s)。
仅在战争或罐子之一需要特殊处理的情况下(例如,包装一些额外的东西或具有特殊的布局),然后在构建部分下,我们可以重新定义插件并覆盖或添加一些额外的东西,行为。 但这不是我们的情况。 我们希望对插件进行一次定义,并具有一个通用配置,该配置将由将要使用它的应用程序的所有模块“ 继承 ”。
使用上面的提示,您可以尝试并尝试创建上面已经“定义”的示例服务模块,或者等待第三部分将快速介绍其余的具体模块。
您可以在此处找到此帖子的代码。 (post2标签)
资源资源
- 第1部分
- Maven War文件夹布局
- JavaEE 7- xml描述符
翻译自: https://www.javacodegeeks.com/2014/05/java-ee7-and-maven-project-for-newbies-part-2-defining-a-simple-war-for-our-application.html