在IDEA上部署Web项目至Tomcat上,虽然Facets和Artifacts都配置完备,然而webapp中的内容却无法被构建进相应的目录中,其原因在于iml文件。
1. 项目结构
pom.xml中配置打包方式<packaging>war</packaging>
-
part2-web,无web.xml
part2-web -
spring-mvc-learning,有web.xml
spring-mvc-learning
2. Facets配置
Facets用于配置Web项目结构,用于之后的Artifacts中:
-
Deployment Descriptors: 配置web.xml文件位置 -
Web Resource Directories: 配置webapp目录,其中包括css/js/jsp等资源
具体配置如下:
-
Facets:
part2-web
Facets: part2-web -
Facets:
spring-mvc-learning
Facets: spring-mvc-learning
3. Artifacts
-
Artifacts:
part2-web
Output directory:PARENT_FOLDER/part2-web/target/part2-web-1.0-SNAPSHOT
Artifacts: part2-web -
Artifacts:
spring-mvc-learning
Output directory:PARENT_FOLDER/spring-mvc-learning/target/spring-mvc-learning-1.0-SNAPSHOT
Artifacts: spring-mvc-learning
以下说明以part2-web:war exploded为例:
通常在Modules中,每个module的Compiler output选择的都是Use module compile output path,其对应配置大致如下:
-
Output path:
PARENT_FOLDER/part2-web/target/classes -
Test output path:
PARENT_FOLDER/part2-web/target/test-classes
Available Elements:

Available Elements中的part2-web,包含以下几部分:
-
'part2-web' compile output: 来源于Modules中配置的Output path/Test output path相关内容。可双击或右键选择Put into WEB-INF/classes加入到左边的Output Layout中 -
Maven: **: 来源于Libraries中module(part2-web)所依赖的jar包。可选择全部所依赖的jar包,然后右键选择Put into WEB-INF/lib加入到左边的Output Layout中 -
Web facet resources: 来源于Facets中配置的内容,如:web.xml,webapp包含的资源。可双击或右键选择Put into Output Root加入到左边的Output Layout中
对于META-INF/MANIFEST.MF文件会在编译后生成。
part2-web:war引用的是part2-web:war exploded,可以不需要。
4. iml
iml文件中的配置,关系到Facets所配置的内容是否会被加入到PARENT_FOLDER/part2-web/target/part2-web-1.0-SNAPSHOT/PARENT_FOLDER/spring-mvc-learning/target/spring-mvc-learning-1.0-SNAPSHOT目录下
part2-web
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="FacetManager">
<facet type="web" name="Web">
<configuration>
<webroots>
<root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
</webroots>
<sourceRoots>
<root url="file://$MODULE_DIR$/src/main/java" />
<root url="file://$MODULE_DIR$/src/main/resources" />
</sourceRoots>
</configuration>
</facet>
</component>
</module>
spring-mvc-learning
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="FacetManager">
<facet type="web" name="Web">
<configuration>
<descriptors>
<deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/src/main/webapp/WEB-INF/web.xml" />
</descriptors>
<webroots>
<root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
</webroots>
<sourceRoots>
<root url="file://$MODULE_DIR$/src/main/java" />
<root url="file://$MODULE_DIR$/src/main/resources" />
</sourceRoots>
</configuration>
</facet>
</component>
</module>
5. 部署

-
part2-web对应的Application context为/ -
spring-mvc-learning对应的Application context为/mvc
然后运行tomcat即可





