转载百度文库的 【Maven+Eclipse+Tomcat配置详解】

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

  1. 解压apache-maven-3.0.5到D:\eclipse\

    (图1)

  2. 拷贝apache-maven-3.0.5/conf/settings.xml到

    C:\Documents and Settings\Administrator\.m2

    (图2)

 

说明:如果setting.xml放置到maven/conf下面相当于全局变量,其修改会影响所有使用maven的人,放置到Administrator\.m2下面是针对某个用户Administrator而言,起修改仅会影响到该用户

  1. 修改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)

  2. 配置环境变量MAVEN_HOME: MAVEN_HOME=D:\eclipse\apache-maven-3.0.5(注意,路径最后不要加\,如果加了\,那后面path读出来的变量名称就是D:\eclipse\apache-maven-3.0.5\\bin,显然是错误的

    (图6)

  3. 配置环境变量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)

  1. 修改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)

  1. 然后修改D:\eclipse\apache-tomcat-6.0.36\conf\tomcat-users.xml,为tomcat配置管理员账号

    <user username="admin" password="admin" roles="manager"/>

(图11)

  1. 修改完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的世界,任何的jarpom或者war都是以基于这些基本的坐标进行区分的。

 

groupId定义了项目属于哪个组(可以理解为项目的package),artifactId定义了当前Maven项目在组中唯一的ID(可以理解为项目名称),version指定了项目当前的版本。

 

(图23)

  1. 了解MyEclipse中项目的结构,web项目必须在src\main\webapps下面才可以成功编译和部署。

    (图24)

  2. 修改index文件,做一个简单的标示。成功运行项目后,页面将显示为如下信息

    (图25)

  3. 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)

 

  1. 运行工程,选择工程名邮件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 sun.net.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, org.eclipse.jdt.core.compiler: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

posted @ 2015-07-16 11:30  旺仔QQ糖  阅读(214)  评论(0编辑  收藏  举报