本文共 2691 字,大约阅读时间需要 8 分钟。
我们已经建立了父pom文件。这种特殊类型的文件用来定义我们项目即将使用的类库,它也配置了所有为了打包项目的每个模块而使用的maven工具。你可以检出第一部分 。
所以,直到现在我们开发的项目目录中我们只有一个叫做sample-parent的文件夹。而且在这个目录中包括pom.xml文件——这就是我们的父pom。
在我们定义的modules部分中可以看到,我们的项目由以下几块组成:
我们需要创建相关的maven模块并给每个模块增加对应的pom.xml文件。
我们在sample-parent文件夹下创建一个叫做sample-web的子文件夹,并且在这个文件夹下面添加一个pom.xml文件(一些人同时完成这两个步骤)。
1 2 3 4 5 6 7 8 9 | < 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会帮助我们构建什么。因此我们需要去定义打包类型,该模块的名称(也是war包的名称)和其他的一些依赖项。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ... < 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(比如),会自动发现pom内容的变化。同时会自动为你创建文件夹,与你的maven war包名一致。它会按照下面的结构创建文件夹。你当然可以自己手动创建,借助工具还是很方便的。
sample-web
在webapp子文件夹下我已经提前创建好了\web-INF\web.xml文件。可以跳过这个环节,因为maven插件可以帮我做这个工作。这里为了说明如果想要自己创建或者应对其他一些需要自定义项的情况,
如果你想知道在空的servlet 3.1 web.xml文件里面写点什么,请看看或者下载本文的代码。我已经在sample package下的java子文件夹下放了一个非常简单的servlet。这个将被包含到我们的项目中,只是很少的几行代码。你可以在本文末尾找到git(bitbucket)链接,下载本文所有代码。
因此,仅仅在我们的war模块的pom文件中添加了很少几行代码。如果有IDE,这个工具会很神奇的帮我们创建一个非常详尽的文件布局。我们根据这个布局然后添加一个非常简单的servlet java文件和很少的xml描述符。这才是真正的意图所在。
maven最爽的事情就是,war模块一些需要去构建的东西已经在这个特殊的父pom文件里面被预先定义和配置好了。但是这些东西是什么,maven将如何去使用它们?正如我们已经描述了Maven的全部约定。通过正确的方法排列正确的事情,然后它们就会为你完成所有的工作。
当maven扫描这个war包的时候,它需要去做:
既然我们没有添加一些特殊的东西在我们的war pom文件中(除了一个依赖库),那谁为我们做的这些工作呢?那当然是这个配置和我们的父pom文件了(详情请查阅)。
这个maven-compiler-plugin插件将被触发去编译我们的源文件。既然我们已经定义了maven模块的打包是war方式,然后maven-war-plugin插件将被触发去为我们打包一切东西,然后创建适当的注释。
当我们的项目有好几个war或者jar模块情况的时候,如果我们有一个父pom,并且我们已经为它定义了一个中央位置的插件和基本的配置,那么我们就没必要去在其他的那些war或者jar模块重新定义他们。
只有当其中的war或者jar模块需要特别对待的时候(例如,打包一些额外的东西或者有一个特殊的文件设计布局)。那么在这个项目部分我们需要重新定义插件和重写或者添加一些其他的东西。但是这些不是我们目前的情况,我们希望我们的插件只定义一次,而且有一个公共的配置被我们所有的将要使用的项目的其他的模块继承。
根据上面的线索,你可以实验和尝试创建我们上面已经定义过的sample-services模块,或者等待文章的第三部分。现一个章节我们将快速的覆盖其他的模块的配置。
你可以在找到这篇文章对应的代码.