Intellij idea 解决no artifacts warnings和部署后报404问题:创建Artifact

在idea中使用使用maven创建工程,此时创建的工程main目录下并不包含webapp文件夹

右击新建webapp文件夹,该文件夹在部署时将被视为web应用的根目录

在该文件夹下创建WEB-INF文件夹,该目录下的内容是无法在浏览器通过URL直接访问的,所以jsp文件一般放在该目录下,除此之外,在部署时,该文件下还会包括classes文件夹,用于存放模块中编译好的class文件;lib文件夹,用于存放模块所依赖的jar包和war包;此外,当模块使用web.xml进行配置时,web.xml文件也将存放于此。

现在的模块已经具有web应用的基本目录结构了,接下来配置模块的Project Structrue

在facets面板下可以将模块配置为web应用

Facets表述了在模块中使用的各种各样的框架、技术和语言。这些Facets让Intellij IDEA知道怎么对待模块内容,并保证与相应的框架和语言保持一致。

将模块添加为web应用

idea默认会在模块目录下创建\web\WEB-INF文件夹,并在该文件夹下创建web.xml文件。Servlet3.0标准以后的容器是可以不需要web.xml文件的。当然,如果模块中配置了web.xml文件,web.xml文件对应的存放目录应该是上面已经创建好的\webapp\WEB-INF,此处也要做相应修改,如果没有配置web.xml文件,可以直接点右边的红色减号把该项删除

默认的配置会在模块路径下创建web文件夹,并将其作为模块在部署时应用的根目录

将其修改为之前创建好的webapp文件夹

在facets面板的最后会出现警告,该警告涉及到artifact面板的配置,将目前的配置apply,接下来转到artifact面板

artifact是maven中的一个概念,表示模块的构建方式,比如我们可以将模块构建成jar,war,war exploded,ear等类型,其中war exploded是idea提供的一种可用于热部署的打包类型。

 一个模块有了artifact就可以部署到web应用服务器上了。

点击"+"号,新建模块的构建方式(Web Application:Exploded),由于上面在facets面板中已经将模块中配置成web应用,所以在这里可以选择"From Modules..."

选中模块,点击OK

Output directory指定构建的路径,如果我们选择的构建方式是Web Application:Archive,就是war包形式,模块构建后就会在该目录下生成一个war包,由于我们选择的是Web Application:Exploded,这个是以文件夹形式(War Exploded)发布。

此处再阐述下构建成war包和构建成文件夹形式的区别:拿war包来说,如果将一个war包放到Tomcat一类的Servlet容器中,启动容器时,容器会自动将war包自动解压成文件夹。为了方便热部署,Exploded方式直接将模块构造成文件夹形式,省去了打包的过程。

所以此处的Output directory即Exploded所在文件夹的目录

此处会有一个WEB-INF文件夹,该文件夹下默认会有一个classes子目录,该目录会用于存放的class文件。但模块在编译后并非直接将编译好的class文件存放于此,在Project面板和Modules面板中可以配置编译好的class文件的输出路径。在构建时,这些class文件才会被拷贝出来,存放到该classes自目录中。

在Project面板中可以配置class文件的输出路径可编译所使用的jdk

在Modules中还可以进一步配置Output Path和Test output path,当然这和我们现在所谈到的Artifacts并无太大关系,只是Artifact中的classes文件夹中的class文件都是从这些路径拷贝出来的而已

回到Artifact面板,除了classes目录外,这里还会有一个lib文件夹,存放模块的依赖包,我在pom文件中已有引用到某些依赖,所以idea自动检测这些依赖并将其添加到了lib下。

但是有时lib文件夹并不会自动创建,我们也可以手动创建:

再手动将依赖包添加进去:

整个Project(项目)的依赖在Libraries面板下可以进行相关配置,pom文件所依赖的包和从外部依赖的包在此处都有显示出来

由于一个大的Project(项目)又可以分为多个Module(模块),在Modules面板下的Dependencies选项下,又可以将依赖指定到相应的模块。

回到Artifact面板,由于在创建Artifact时,idea自动引入了‘Web’ facet resources ,这些内容也就是对应src/main/java和src/mian/resources目录下存放的内容

回到facets面板,可以发现之前的黄色警告已经消失了

至此,配置Artifact完成。

配置Tomcat容器时就有Artifact选项了

最后再补充一下,构建Artifact时,除了处理classes和lib下的内容外,webapp下的其余所有内容也会被复制到构建文件夹下,如 :我们可能会在webapp下放置静态文件,在WEB-INF下存放jsp文件等等,这些内容都会被复制。

参考:

https://www.cnblogs.com/poilk/p/6529347.html

https://blog.csdn.net/xiaobudingCC/article/details/79108267

猜你喜欢

转载自blog.csdn.net/qq_33265520/article/details/82843662
今日推荐