注:Eclipse导入项目,不管是否是多次导入相同的项目,请坚持坚持一个workspace对应一个项目原则,如果是ssm项目,则最好一个workspace对应一个项目于对应一个tomcat。(由于项目端口号是在server.xml里配的,相同的项目不对应一个tomcat一般没事,特殊时候可能有问题哈)。导入前,在电脑磁盘创建一个workspace文件夹,然后在eclipse界面先切换到该workspace,步骤:File>Switch Workspace>Other>Browse选择该workspace文件夹>Launch即可。参考下图:
切换到该workspace后可通过两种方式导入项目:远程和本地(这里演示git和本地导入)。
git地址方式导入步骤:File>Import>Git>Projects from Git>Next>Clone URL>Next>将git地址贴入URL栏>Next>Deselect All之后再单独勾选此项目>Next>再Next>Directory栏有的人选择默认(本人选择workspace目录)>Next>再Next>Finish即可。
本地导入方式步骤:不管是否maven项目,本地都可以直接File>Import>General>Existing Projects Into...>next>Browser选择项目文件夹>勾选Copy projects into workspace>Finish即可。一个workspace对应一个项目,不管是否是同一个项目,都不会产生下方的问题(它是由于在一个workspace里重复导入相同的项目引起的)。
不管是否maven项目,本地都可以直接File>Import>General>Existing Projects Into...>next>Browser选择项目文件夹>勾选Copy projects into workspace>Finish。如图:
多次导入同一个项目(同一个项目,同一个workspace,但项目所在文件夹不同),用于进行测试,原项目要继续保留,作为备份。
但当我们导入在Eclipse项目管理器中已经存在的项目时,Eclipse总是会提示我们Some project cannot be imported because they already exist in the workspace,如图:
解决办法:在eclipse这里将原先的项目随便改个名即可。例如,右键项目>Refactor>Rename,改为"ssm666"。然后再次导入。
当然,Tomcat启动项目时可能会报错,如下:
java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [D:\eclipse-workspace1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ssm555\] instead of [D:\eclipse-workspace1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ssm666\] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!
解析与解决:
部署在同一容器中的Web项目,web.xml要配置param-name为webAppRootKey且param-value不同的<context-param>,如果该项目不配置,则默认有一个:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param>
因为这两个项目是相同的,而且都没配置,所以都有上面这个默认配置,第一个项目只要启动过一次之后,webapp.root在该Tomcat中就已被设置,当再次用该Tomcat中启动第二个项目时,webapp.root这个value再次被尝试设置,于是报了这个错。
web.xml添加如下配置即可。如果项目中已配有webAppRootKey,则修改param-value保证同一个Tomcat中该param-value是唯一的即可:
<!-- dev_gx_1 这名字可以随便取,和tomcat中其他项目的值不一样即可-->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>dev_gx_1.root</param-value>
</context-param>