在自己尝试着使用idea配置一些maven web项目基本的设置,虽然不起眼,但是对于使用idea进行开发却至关重要。
测试时的目录结构如下图所示:
有几个重要概念在开发时需要特别注意,只有弄清楚才能自如的对项目进行相关设置,从打开项目结构alt+ctrl+shift+s说起:
1 project 中的project compile output目录设置的路径不重要,因为在具体module中会被Path覆盖。
2 在关键的module设置中,maven结构 src/main/java一般设置为source,里面的java文件在编译后会放在module中path设置的位置,使用maven,path的默认位置是项目名/target/classes下(可更改),注意项目src/main/resources文件也会被直接编译到target/classes/下,如图bb.xml
3 对于module中关键的dependency问题,即依赖包,在maven 项目里,在src/main/webapp/inf/lib中是不需要加入jar包,因为maven已经自动管理,运行时会从本地仓库读取,同时src/main/webapp/inf/classes文件夹中也是没有内容,项目编译输出可以根据module中path的默认设置在target下,因此src/main/webapp/inf/classes文件夹为空。 当我们在artifacts中对项目进行打包成exploded war时,若选择在项目的src/main/webapp下输出,则idea会把target/classes中的编译文件,包括class文件和xml配置文件等都拷贝一份到src/main/webapp/inf/classes目录下,这是该目录才有值,正常编译时没有内容(默认编译目录在target下),lib文件也为空,tomcat根据src/main/webapp下打包成exploded war进行加载时,可以做到实时更新对jsp文件热部署。
4 在编译之后,即可在target中生成classes编译目录,mvn package命令后,会生成项目名/wen-inf和meta-inf的web APP文件,并且对该文件进行war打包,(需要再pom.xml中配置<packaging>为war,默认为jar),在idea中可以对war文件或target下目录文件进行部署,也可以对artifacts中的exploded war文件进行部署,之后exploded war 文件部署在webapp下时,可实现实时呈现,前两个都需要重新package,重新部署才可。
这样就可以正常部署项目了,以上都是自己实践得来,如有错误或者不当之处,欢迎指正。