有 4 种方式使用 WAR 插件:
注意:使用war:目标时,假定编译阶段已经完成。WAR 插件不负责编译 java 源代码或复制资源。
要处理存档此版本的 Maven WAR 插件,请使用Maven Archiver 3.2.0。
要处理过滤此版本的 Maven WAR 插件,请使用Maven Filtering 3.1.1。
这是使用 WAR 插件的正常方式。为了说明,这里是我们项目的pom.xml :
<project> ... <groupId>com.example.projects</groupId> <artifactId>documentedproject</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>Documented Project</name> <url>http://example.com</url> ... </project>
该项目的结构如下所示:
|-- pom.xml
`-- src
`-- main
|-- java
| `-- com
| `-- example
| `-- projects
| `-- SampleAction.java
|-- resources
| `-- images
| `-- sampleimage.jpg
`-- webapp
|-- WEB-INF
| `-- web.xml
|-- index.jsp
`-- jsp
`-- websource.jsp调用
mvn package
要么
mvn compile war:war
将生成 WAR 文件target/documentedproject-1.0-SNAPSHOT.war。以下是该 WAR 文件的内容:
documentedproject-1.0-SNAPSHOT.war
|-- META-INF
| |-- MANIFEST.MF
| `-- maven
| `-- com.example.projects
| `-- documentedproject
| |-- pom.properties
| `-- pom.xml
|-- WEB-INF
| |-- classes
| | |-- com
| | | `-- example
| | | `-- projects
| | | `-- SampleAction.class
| | `-- images
| | `-- sampleimage.jpg
| `-- web.xml
|-- index.jsp
`-- jsp
`-- websource.jsp为了加快开发阶段的测试,war:explode可用于生成分解形式的 WAR。使用与上面相同的项目并调用:
mvn compile war:exploded
这将在target/documentedproject-1.0-SNAPSHOT中生成 WAR 的分解版本。该目录的内容如下所示:
documentedproject-1.0-SNAPSHOT
|-- META-INF
|-- WEB-INF
| |-- classes
| | |-- com
| | | `-- example
| | | `-- projects
| | | `-- SampleAction.class
| | `-- images
| | `-- sampleimage.jpg
| `-- web.xml
|-- index.jsp
`-- jsp
`-- websource.jsp展开的 WAR 的默认目录是target/<finalName>。finalName通常采用< artifactId>-<version>的形式。可以通过指定webappDirectory参数覆盖此默认目录。
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<webappDirectory>/sample/servlet/container/deploy/directory</webappDirectory>
</configuration>
</plugin>
</plugins>
</build>
...
</project>war:exploded的另一个变体是war:inplace。使用war:inplace会在 webapp 源中创建分解的 WAR,默认为src/main/webapp。使用我们上面的示例项目,并调用:
mvn compile war:inplace
这将导致:
|-- pom.xml
|-- src
| `-- main
| |-- java
| | `-- com
| | `-- example
| | `-- projects
| | `-- SampleAction.java
| |-- resources
| | `-- images
| | `-- sampleimage.jpg
| `-- webapp
| |-- META-INF
| |-- WEB-INF
| | |-- classes
| | | |-- com
| | | | `-- example
| | | | `-- projects
| | | | `-- SampleAction.class
| | | `-- images
| | | `-- sampleimage.jpg
| | `-- web.xml
| |-- index.jsp
| `-- jsp
| `-- websource.jsp
`-- target
`-- classes
|-- com
| `-- example
| `-- projects
| `-- SampleAction.class
`-- images
`-- sampleimage.jpg