当Maven遇上MyEclipse
1 用maven创建一个web project
?mvn archetype:create?? -DgroupId=com.lifesting? -DartifactId=test? -DarchetypeArtifactId=maven-archetype-webapp
2 补全某些目录
?cd test\src
?mkdir?main\java
?mkdir test\resources
?mkdir test\java
3 修改pom文件,在生成eclipse项目的时候maven eclipse plugin使用此配置
? 在project/build下面插入
????<plugin>?
??????<groupId>org.apache.maven.plugins</groupId>?
??????<artifactId>maven-eclipse-plugin</artifactId>?
??????<configuration>?
?????????<projectnatures>?
????????????<java.lang.String>com.genuitec.eclipse.j2eedt.core.webnature</java.lang.String>?
????????????<java.lang.String>org.eclipse.jdt.core.javanature</java.lang.String>?
??????????</projectnatures>?
??????????<outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>?
??????</configuration>?
????</plugin>?
??</plugins>?
project nature是eclipse开发中一个概念,比如加入javanature就表示此项目是一个java project,会绑定一个java builder用来编译java文件,而webnature告诉MyEclipse这是一个MyEclipse web项目,更多MyEclipse projectNature:
webservice-- com.genuitec.eclipse.ws.xfire.wsnature
facelet-- com.genuitec.eclipse.jsf.faceletsnature
jsf--com.genuitec.eclipse.jsf.jsfnature
struts--com.genuitec.eclipse.cross.easystruts.eclipse.easystrutsnature
或者在插件里面使用这个方法:
????????try?{
????????????String[]?natures?=?project.getDescription().getNatureIds();
????????????for?(String?nature?:natures)
????????????????System.out.println(nature);
????????}?catch?(CoreException?e)?{
????????????e.printStackTrace();
????????}
可以将项目所有的nature打印出来
outputDirectory主要是告诉maven eclipse plugin编译输出在什么位置,默认在target/classes下面,web项目不同,应该放在src/main/webapp/WEB-INF/classes 才能够被MyEclipse package到服务器。
4 在命令行test目录下运行mvn eclipse:eclipse生成Eclipse项目。
5 在MyEclipse中将test project 导入到workspace,MyEclipse通过projectNature识别到test是一个MyEclipse web project,它会在项目目录下生成一个.mymetadata文件。再关闭MyEclipse,这么做的原因是因为默认MyEclipse的webRoot不可配置。
6 修改MyEclipse下面的.mymetadata文件,比如我的test项目文件内容为
<project-module
??type="WEB"
??name="test"
??id="myeclipse.1207117121765"
??j2ee-spec="1.4"
??archive="test.war">
??<attributes>
????<attribute?name="webrootdir"?value="/WebRoot"?/>
??</attributes>
</project-module>
增加一行,修改一行为:
<project-module
??type="WEB"
??name="test"
??id="myeclipse.1207117121765"
??context-root="/test""
??j2ee-spec="1.4"
??archive="test.war">
??<attributes>
????<attribute?name="webrootdir"?value="/src/main/webapp"?/>
??</attributes>
</project-module>
可以看到,增加的一行 context-root="/test" 表示web的上下文为test.
修改的一行为webrootdir的值,将/WebRoot改为maven默认的web项目source目录/src/main/webapp。
7 重新启动MyEclipse,一切搞定了,调试开发两不误。
参考资料
http://www.myeclipseide.com/PNphpBB2-viewtopic-t-17416.html
?
------------------------------------------------------------------------------------------------------------------------------------------------
Struts(Struts2.1.6)自带的例子(Maven编译的)顺利导入MyEclipse中
?
具体步骤如下(有点麻烦,以后改进):
先期工作:下载并安装成功Maven环境。
1. 下载struts2.1.6源码,在apps目录下就是例子源码
2. 修改各个工程的pom.xml文件, 在build/plugins下加入以下plugin(供生成eclipse工程用):
??? <plugin>
????? <groupId>org.apache.maven.plugins</groupId>
????? <artifactId>maven-eclipse-plugin</artifactId>
????? <configuration>
???????? <projectnatures>
??????????? <!--这句会让你在MyEclipse下看到Maven标志-一个红色M-->
??????????? <java.lang.String>com.genuitec.eclipse.maven.maven2Nature</java.lang.String>
??????????? <java.lang.String>com.genuitec.eclipse.j2eedt.core.webnature</java.lang.String>
??????????? <java.lang.String>org.eclipse.jdt.core.javanature</java.lang.String>
????????? </projectnatures>
????????? <outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
????? </configuration>
??? </plugin>
3. 命令行下定位到apps下,针对各例子逐个执行以下命令(以blank为例)
>cd blank
>mvn eclipse:eclipse
4. 用MyEclipse导入你生成的eclipse工程,然后再移除(不是删掉内容哦!这么麻烦就是想要MyEclipse生成的.mymetadata文件)
修改.mymetadata文件为如下样式:
<?xml version="1.0" encoding="UTF-8"?>
<project-module
? type="WEB"
? name="struts2-blank"
? id="myeclipse.1237001022359"
? context-root="/struts2-blank"
? j2ee-spec="1.4"
? archive="struts2-blank.war">
? <attributes>
??? <attribute name="webrootdir" value="/src/main/webapp" />
? </attributes>
</project-module>
这步也可采用如下做法(测试):
第3步后,直接在工程目录下创建一个.mymetadata文件,写入以上文件内容(注意修改红色部分哦!)
修改后重新导入MyEclipse,基本就是可以用了。
5. 解决可能出现的Build Path问题