资源描述
Maven+Eclipse+Tomcat配置详解
前言:本文介绍的内容都是基于JDK配置ok的情况下进行的,JDK的配置在此不做描述。
------------------------------------------------1.Maven的配置--------------------------------------------------------
1. 下载maven,此处使用apache-maven-3.0.5版本,下载地址:
http://maven.apache.org/docs/3.0.5/release-notes.html
2. 解压apache-maven-3.0.5到D:\eclipse\
(图1)
3. 拷贝apache-maven-3.0.5/conf/settings.xml到
C:\Documents and Settings\Administrator\.m2
(图2)
(说明:如果setting.xml放置到maven/conf下面相当于全局变量,其修改会影响所有使用maven的人,放置到Administrator\.m2下面是针对某个用户Administrator而言,起修改仅会影响到该用户)
4. 修改C:\Documents and Settings\Administrator\.m2\settings.xml
(1) 修改maven本地资源库的配置,以后maven用到的所有资源文件都会存储到该目录下:
<localRepository>D:\eclipse\apache-maven-local-repository</localRepository>
(图3)
(图4)
(2) 再说一说settings.xml 文件中与tomcat相关的配置,以备后面集成使用,此步骤可暂缓进行,此处只是为了文档完整性而作。<id>标签可以理解为tomcat别名,比如本人使用的是apache-tomcat-6.0.36,那<id>标签中的内容为tomcat6(记住这个别名,很重要的,后面的pom.xml配置,以及eclipse的maven build中都会用到),<username>和<password>标签内容对应apache-tomcat-6.0.36\conf\tomcat-users.xml中设置的用户名和密码。(此步骤可在配置完tomcat以后再配置)
<server>
<id>tomcat6</id>
<username>admin</username>
<password>admin</password>
</server>(图5)
5. 配置环境变量MAVEN_HOME: MAVEN_HOME=D:\eclipse\apache-maven-3.0.5(注意,路径最后不要加\,如果加了\,那后面path读出来的变量名称就是D:\eclipse\apache-maven-3.0.5\\bin,显然是错误的)
(图6)
6. 配置环境变量path:在path里面添加%MAVEN_HOME%\bin; (注意,英文状态下的分号;不能少)
(图7)
环境变量配置好以后,在cmd里输入mvn –version,如果出现下图信息,表示配置成功。
(图8)
至此,maven的配置完成。
------------------------------------------------2.Tomcat的配置--------------------------------------------------------
1. 下载tomcat,可到apache官网http://tomcat.apache.org/download-60.cgi
2. 解压apache-tomcat-6.0.36到D:\eclipse\
(图9)
3. 修改tomcat的配置D:\eclipse\apache-tomcat-6.0.36\conf,首先修改server.xml,tomcat默认端口是8080,为防止端口冲突,将8080修改为6080。
<Connector port="6080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
(图10)
4. 然后修改D:\eclipse\apache-tomcat-6.0.36\conf\tomcat-users.xml,为tomcat配置管理员账号
<user username="admin" password="admin" roles="manager"/>
(图11)
5. 修改完tomcat的配置后进入D:\eclipse\apache-tomcat-6.0.36\bin,startup.bat启动tomcat,在地址栏里输入:http://localhost:6080/manager/html,弹出用户名和密码输入框,输入第4步骤设置的用户名和密码。
(图12)
登录成功后进入tomcat管理页面,表示tomcat配置成功
(图13)
至此,tomat配置完成。
------------------------------------------------3.Eclipse的配置--------------------------------------------------------
1. 安装Eclipse和MyEclipse,可到官网下载
(图14)
2. 启动MyEclipse,进入help->MyEclipse Configuration Center
(图15)
3. 进入Center中心后切换到SoftWare标签,一般高版本的MyEclipse会自带Maven插件,可先通过My SoftWare中卸载Maven插件,然后再在Browser SoftWare中通过add site添加m2eclipse:
Maven:http://download.eclipse.org/technology/m2e/releases
最后通过Pending Changes中的【Apply (1) change 】安装插件,中间可能会需要多次重启MyEclipse。
(图16)
4. MyEclipse的Maven插件安装完成后,在window->preference中会看到Maven插件,然后就是对Maven进行配置,首先是Installations,需要将本地的Maven添加进来D:\eclipse\apache-maven-3.0.5,并且配置好Global Setting
(图17)
然后再配置User Settings
(图18)
5. 在MyEclipse中配置tomcat(注意:tomcat server必须选择为Enable,否则不可用)
(图19)
------------------------------------------------------------4.示例------------------------------------------------------------
1. 现在就使用上面的配置创建我们的第一个maven webapp工程吧,打开MyEclipse的File->New->Others->Maven->Maven Project
(图20)
(图21)
Catalog为All Catalogs,mabaen-archetype-webapp
(图22)
Group Id 和Artifact Id及Version都是Maven的几个关键元素,这三个元素定义了项目的基本坐标,在Maven的世界,任何的jar、pom或者war都是以基于这些基本的坐标进行区分的。
groupId定义了项目属于哪个组(可以理解为项目的package),artifactId定义了当前Maven项目在组中唯一的ID(可以理解为项目名称),version指定了项目当前的版本。
(图23)
2. 了解MyEclipse中项目的结构,web项目必须在src\main\webapps下面才可以成功编译和部署。
(图24)
3. 修改index文件,做一个简单的标示。成功运行项目后,页面将显示为如下信息
(图25)
4. pom.xml文件是maven的核心(pom:Project Object Model),在该文件中可以加载任何项目所需的插件,系统会自动将这些项目所需的插件从maven repository center下载下来。因为要希望把项目部署到外部tomcat下面,所以此处需要加入tomcat-maven插件,以及希望启动的tomcat配置
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<version>2.0-beta-1</version>
<configuration>
<url>http://localhost:6080/manager</url>
<server>tomcat6</server>
<port>6080</port>
<path>/MyFirstMaven</path>
</configuration>
</plugin>
</plugins>(图26)
5. 运行工程,选择工程名邮件Run As->maven clean,会将之前编译的内容清除重新编译。
(图27)
然后执行maven bulid,并在goals中输入package tomcat6:deploy
(图28)
先查看一下(图28)run之前tomcat\webapps目录下的内容
(图29)
Run(图28),当MyEclipse中的console控制台输出的内容为BUILD SUCCESS时,就表示部署成功了
(图30)
(图28)Run之后tomcat\webapps目录下的内容,多了MyFirstMaven和MyFirstMaven.war两个文件,表示项目发布成功
(图31)
MyEclipse->项目右键->Run As->Maven Build,输入tomcat6:run,就可启动tomcat。
(图32)
出现如下信息表示tomcat启动成功
(图33)
在浏览器中输入http://localhost:6080/MyFirstMaven并访问
(图34)
Ok,maven webapp项目实例完成。
------------------------------------------------5.问题解答--------------------------------------------------------
在maven build工程的时候,大多数资料都是显示tomcat:deploy等等,于是一开始也是按照tomcat:deploy格式输入的,结果会产生大量的报错,而且启动的tomcat端口是8080,是eclipse自带的tomcat,而不是我们设置的6080端口的tomcat。错误信息如下:
[DEBUG] (f) charset = ISO-8859-1
[DEBUG] (f) contextFile = D:\eclipse\workspaces\MyFirstMaven\target\MyFirstMaven\META-INF\context.xml
[DEBUG] (f) ignorePackaging = false
[DEBUG] (f) mode = war
[DEBUG] (f) packaging = war
[DEBUG] (f) path = /MyFirstMaven
[DEBUG] (f) update = false
[DEBUG] (f) url = http://localhost:8080/manager
[DEBUG] (f) version = 1.1
[DEBUG] (f) warFile = D:\eclipse\workspaces\MyFirstMaven\target\MyFirstMaven.war
[DEBUG] -- end configuration --
[INFO] Deploying war to http://localhost:8080/MyFirstMaven
[DEBUG] No server specified for authentication - using defaults
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.797s
[INFO] Finished at: Wed Mar 13 11:24:37 CST 2013
[INFO] Final Memory: 6M/12M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.1:deploy (default-cli) on project MyFirstMaven: Cannot invoke Tomcat manager: Server returned HTTP response code: 400 for URL: http://localhost:8080/manager/deploy?path=%2FMyFirstMaven&war= -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.1:deploy (default-cli) on project MyFirstMaven: Cannot invoke Tomcat manager
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException: Cannot invoke Tomcat manager
at org.codehaus.mojo.tomcat.AbstractCatalinaMojo.execute(AbstractCatalinaMojo.java:149)
at org.codehaus.mojo.tomcat.AbstractWarCatalinaMojo.execute(AbstractWarCatalinaMojo.java:70)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
... 19 more
Caused by: java.io.IOException: Server returned HTTP response code: 400 for URL: http://localhost:8080/manager/deploy?path=%2FMyFirstMaven&war=
at .www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1305)
at org.codehaus.mojo.tomcat.TomcatManager.invoke(TomcatManager.java:604)
at org.codehaus.mojo.tomcat.TomcatManager.deployImpl(TomcatManager.java:662)
at org.codehaus.mojo.tomcat.TomcatManager.deploy(TomcatManager.java:295)
at org.codehaus.mojo.tomcat.AbstractDeployWarMojo.deployWar(AbstractDeployWarMojo.java:85)
at org.codehaus.mojo.tomcat.AbstractDeployMojo.invokeManager(AbstractDeployMojo.java:85)
at org.codehaus.mojo.tomcat.AbstractCatalinaMojo.execute(AbstractCatalinaMojo.java:141)
... 22 more
[ERROR]
[ERROR]
原因分析及解决方案:
1. 为什么tomcat:deploy的时候会报错呢?
报错Cannot invoke Tomcat manager: Server returned HTTP response code: 400的原因是因为如果用tomcat,maven是自动调用的maven自带的插件tomcat-6.0.29,前面介绍过,我们需要设置tomcat-user,才能访问tomcat的manager http://localhost:8080/manager/,因为maven自带的tomcat-6.0.29并没有设置tomcat-user,所以无法访问,报错400.
2. 为什么启动的是8080端口的tomcat,而不是我们所需要的6080端口的tomcat呢?
因为如果使用tomcat:deploy或tomcat:run,maven会自动调用的maven自带的tomcat-6.0.29插件,而不是我们所需的外部设置的tomcat-6.0.36,那该怎么办呢?前面在maven-setting.xml设置的时候,重点强调过,有一个配置tomcat的地方,<id>tomcat6<id>是需要记住的,后面会用到。就是这个时候用到了,尝试在maven build的时候,在goals里输入tomcat6:deploy或tomcat6:run,ok问题解决啦,外部的tomcat6.0.36就被启动起来了。
(f) packaging = war
[DEBUG] (f) path = /MyFirstMaven
[DEBUG] (f) pluginArtifacts = [org.apache.tomcat.maven:tomcat6-maven-plugin:maven-plugin:2.0-beta-1:, org.apache.tomcat.maven:common-tomcat-maven-plugin:jar:2.0-beta-1:compile, org.codehaus.plexus:plexus-archiver:jar:2.0.1:compile, org.codehaus.plexus:plexus-io:jar:2.0.1:compile, com.google.guava:guava:jar:10.0.1:compile, com.google.code.findbugs:jsr305:jar:1.3.9:compile, commons-io:commons-io:jar:2.0.1:compile, org.apache.httpcomponents:fluent-hc:jar:4.2-alpha1:compile, commons-logging:commons-logging:jar:1.1.1:compile, org.apache.httpcomponents:httpclient:jar:4.2-alpha1:compile, org.apache.httpcomponents:httpcore:jar:4.2-alpha2:compile, org.codehaus.plexus:plexus-component-annotations:jar:1.5.5:compile, commons-lang:commons-lang:jar:2.6:compile, junit:junit:jar:4.10:compile, org.hamcrest:hamcrest-core:jar:1.1:compile, org.apache.maven:maven-archiver:jar:2.4.2:compile, org.codehaus.plexus:plexus-interpolation:jar:1.13:compile, org.codehaus.plexus:plexus-utils:jar:3.0:compile, commons-codec:commons-codec:jar:1.3:compile, org.apache.tomcat:catalina:jar:6.0.35:compile, org.apache.tomcat:juli:jar:6.0.35:compile, org.apache.tomcat:annotations-api:jar:6.0.35:compile, org.apache.tomcat:catalina-ha:jar:6.0.35:runtime, org.apache.tomcat:tribes:jar:6.0.35:runtime, org.apache.tomcat:el-api:jar:6.0.35:runtime, piler:ecj:jar:3.7.1:compile, org.apache.tomcat:jasper:jar:6.0.35:runtime, org.apache.tomcat:jasper-el:jar:6.0.35:runtime, org.apache.tomcat:jsp-api:jar:6.0.35:runtime, org.apache.tomcat:servlet-api:jar:6.0.35:runtime, org.apache.tomcat:coyote:jar:6.0.35:runtime, org.apache.tomcat:dbcp:jar:6.0.35:runtime]
[DEBUG] (f) port = 6080
[DEBUG] (f) project = MavenProject: org.sun:MyFirstMaven:0.0.1-SNAPSHOT @ D:\eclipse\workspaces\MyFirstMaven\pom.xml
[DEBUG] (f) protocol = HTTP/1.1
[DEBUG] (f) uriEncoding = ISO-8859-1
[DEBUG] (f) useNaming = true
[DEBUG] (f) useSeparateTomcatClassLoader = false
[DEBUG] (f) useTestClasspath = false
[DEBUG] (f) warSourceDirectory = D:\eclipse\workspaces\MyFirstMaven\src\main\webapp
[DEBUG] -- end configuration --
[INFO] Running war on http://localhost:6080/MyFirstMaven
展开阅读全文