问题:
在运行maven项目的时候,发现在项目上右键run as 没有run on server选项;
解决方法:在新建maven项目的时候,在packaging中选war而不选jar。
如图,通过maven建web项目时packaging里选war:
我测试过,如果Packaging里选的是jar,项目无论如何都无法作为web项目正常启动。
我也测试了另一种方法,貌似无效:
这种方法是在新建maven时Packaging里选jar,但是中间通过以下方式改成动态的web项目。
具体做法如下:
在maven项目上右键>properties>Project Facets:
可以看到当前并不是web项目,所以勾选两个选项:Dynamic Web Module、JavaScript:
如果项目中没有web.xml可以在这里进行预设置
可以点击上图中的Further configuration avaliable
之后可以看到默认配置:
如果不修改它的默认配置,会直接在项目发布路径下生成webcontent,如下图所示:
所以需要修改配置如下:
勾选生成web.xml(如果不勾选不会生成web.xml),并修改web.xml生成的所在文件夹为webapp。
点击OK,之后点击Apply即可。
如下图,已经生成webapp和内部的web.xml:
接着按照正常的项目结构,可以把webapp拖到src下main文件夹:
之后,可以在项目上右键run as,就可看到Run on server:
服务启动后,浏览器也能正常启动,但是还没完,还是会出错。
我配的欢迎页面失效了,会显示404:
看来声明为jar还是无法运行成功。
基本上,除了改成war包,还没找到其它方法解决方法。
可以看一下建立maven项目时,声明jar包与war包产生的两种pom文件区别:
jar:
<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>
<groupId>com.changping.shirodemo</groupId>
<artifactId>shirodemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
war:
<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>
<groupId>com.changping.shirodemo01</groupId>
<artifactId>shirodemo01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
</project>
通过比较pom文件可以发现:声明war也就比jar多了<packaging>war</packaging>。
所以如果不想新建maven项目、或者欢迎页面不想变404的话,可以在pom文件里加上<packaging>war</packaging>,修改之后update即可。
如图是packaging修改为war,服务启动后,欢迎页面已经可以正常显示:
至于如果maven项目里webapp下没有web.xml的解决方法,除了刚才那种右键>properties>Project Facets方式以外,还可以直接从别的项目粘一个即可: