Eclipse中创建Web Maven Project并部署到Tomcat中(Maven 的Web Project加入另一个Maven Project依赖)

前言:

       大家都知道,在进行J2EE项目的开发过程中,在调试阶段如果只是修改了页面是不需要重启应用服务器的,比如不需要重启Tomcat。只需要在浏览器中进行页面刷新即可。其实之所以不用重启Tomcat等应用服务器,其根本原因是因为我们可以在应用服务器的配置文件中设置虚拟目录,这样就可以知道web项目所在的目录,于是就可以省去打包、然后再重新发布到服务器的步骤。

       为什么不需要重启呢?

   在Eclipse中开发j2ee项目,所有的jsp文件都是放在WebRoot目录下面,用户需要把所有用到的jar包放到WEB-INFWebRoot的子目录)目录下的lib目录下(这就是没有用maven管理的缺点,所有jar都要自己去找);Eclipse编译时,会把java源代码产生的class文件放到WEB-INF目录的classes目录下。所以大家在应用服务器中指定虚拟目录时,直接指定到WebRoot目录就行了,这样在调试过程中,如果只修改了jsp文件,则不需要重启服务器,刷新页面,就可以看到修改后的效果。

 

       一. 在没有用Maven管理项目时,在Eclipse中将一个项目发布到Tomcat是非常方便的。

如果是一个web项目,那么只需要在Eclipse中的Servers View中简单的添加(因为Eclipse能够检测到web项目),


选中想要添加的web项目,然后点击Finish按钮即可。

 

如果不是web项目,有两种解决方法:

        第一种是也在Eclipse的Servers View中添加一个Server,然后直接点击Finish按钮。然后在Eclipse的Servers View中双击刚添加的Server,并点击Add External Web Moudle按钮,并直接找到该项目的绝对路径然后将其添加到Eclipse中,并指定path路径为src/main/webapp. C:\Users\swang6\workspace\AutoStressTest\ASTWeb\src\main\webapp



        第二种方法是通过如下步骤将一个非Web Project修改为Web Project:

                1.     右击工程选择properties—>project facets 



     2. 点击链接"Convert to faccted from..."
(注意,该链接只在第一次出现,即在点击过一次后,不再出现)然后
选上Dynamic Web Module ,如果Version是2.4,可把Version由2.4改为2.5.(注意如果你当前是使用Tomcat6及Tomcat6以前的版本,不能使用Version3.0, 因为Version3.0支持的JDK是7.0以上的版本,Tomcat6不支持)

 

             3.    然后点击下面的Further configuration available…,弹出Modify Faceted Project窗口此处是设置web.xml文件的路径,输入src/main/webapp,该操作会在src/main/webapp中创建一个新的web.xml文件,即该目录为web项目的虚拟目录. 然后直接和前面提到的操作一样,只需要在Eclipse的Servers view 中增加一个tomcat server, 并直接将web moudle加到该工程中. (注:Further configuration available…链接也是再点击一次后,以后就不会再出现。)

       

      二. 在用Maven管理j2EE项目时

在用Maven管理项目时,也可以使用如上提到的方法。但有人会问,在Eclipse中,如何创建一个Maven的Web项目?如果多个Maven项目之间有依赖,如何在部署到Tomcat的时候将互相依赖的项目也部署进去?

    问题1: 如何在Eclipse中创建一个Maven的web项目。(为了让更多的人了解怎么创建有相互依赖关系的Maven项目,即有父子关系,下面以一个这样的例子为例说明)

 

  1.  Eclipse中安装maven插件:m2e - http://m2eclipse.sonatype.org/sites/m2e

 

  2 . 创建一个maven 的web 项目

       使用eclipse直接创建maven的web项目:

   1):eclipse建立一个maven项目,弹出窗口选着webapp, 点击next,输入相关的信息就行。在下面的对话框中选择maven-archetype-webapp。 我们假定该项目为parent项目,注意parent项目的packaing必须是pom,如果是war,因为我们这个地方创建的是一个web项目,默认的packaging方式是war,所以需要将其改为pom

  <groupId>com.wsheng</groupId>

  <artifactId>wsheng-spring-base</artifactId>

  <packaging>pom</packaging>

 



   

    2)在有的Eclipse版本中,可能需要自己手动创建如下3个源文件:分别为:src.main.java,src.test.javasrc.test.resources

    3)在第一步结束后,你会发现现在Eclipse的工作区间中多了一个maven的project项目:wsheng-spring-base。

    4)右击wsheng-spring-base,选择创建一个Maven 的module



 

 输入module名字为wsheng-spring-mvc, 同1)一样,选择创建一个maven-archetype-webapp的web项目。

 

        5) 创建结束后,wsheng-spring-base和wsheng-spring-mvc都是maven的web项目,当然你知道可以在Eclipse的Servers View中New 一个Server,你会发现,Eclipse中你可以直接部署这两个项目到Tomcat中,所以他们也就是Web项目了。这种方法是最简单的方法。直接可以在Eclipse中修改页面文件,会自动部署到Tomcat中而不用重启Tomcat。

 

         特别需要注意的是,不要执行mvn eclipse:eclipse命令,执行该命令后,会将一个maven的project转化为一个eclipse的project,即此时在eclipse中就不再是一个maven的web project了,就不能直接部署到Tomcat中了。

 

 

 问题二:如果我们在Eclipse中创建的项目不是像上面一样创建Maven的Web项目,而是普通的项目,怎样将其部署到Tomcat中?

   注: 该方法显然很麻烦,直接在Eclipse中创建一个Maven的Web项目是多么的简单,但介绍该方法主要是为了让大家明白Eclipse中部署项目到Tomcat的本质所在。有兴趣的朋友不妨一试。

         

          1. 可以参照上面的第二种方法是通过如下步骤将一个非Web Project修改为Web Project:》现将一个非maven的web项目转化为一个maven的web项目。如现在有一个testMaven的project我们经过转换,将其转化为一个Maven的Web项目后。

 

 

          2. 创建的几个java类和一个abc.jsp页面进行测试。

 

 

 图一

       

    (其中target目录是用来存放项目打包之后生成的文件的目录,图一中显示target目录下并没有文件,是因为我们还没有用maven对项目进行打包。)

  

        3.  运行打包命令:mvn clean package 【对项目进行打包】

运行此命令后,项目的结构如图二:



 
图二

           执行上面的命令后你会发现图二中target目录下多出了几个子目录和文件,这是因为运行命令mvn clean package后,生成的文件默认会放在target目录下。其中testMaven.war文件可以直接拷贝到应用服务器如Tomcat的发布目录下,启动服务器可以直接运行!但在开发阶段,相信不会有人这么调试web项目!因为这样不停的拷贝到Tomcat中太麻烦了!!! 

          其实如果你认真观察,你会发现生成的子目录testMaven也是一个完整的web应用,展开后如图三:



 
图三

    根据前面所说的,如果我们能够制定一个web项目的虚拟目录,直接将其部署到Tomcat中即可。 在此例子中虚拟目录应该是 “D:/EclipseWorkspace/testMaven/target/testMaven”。但这样的话,有一个缺点,那就是每次只要修改了项 目中的文件,即使是jsp文件或者静态页面,你都要运行mvn clean package命令重新打包;要不然你的修改就不会更新到target目录下的文件中去!这样的话感觉比较麻烦,万一忘了执行此命令就刷新页面,发现没有看到修改后的效果,找问题都不好找!因为maven遵循“约定优先于配置”的思想。所以一般所有的页面都是放在目录webapp下面的,就我这例子而言也是 如此!图二和图三都是执行了mvn clean package命令之后的项目的目录结构,认真观察可以发现在webapp的子目录WEB-INF下面除了页面的源文件,并没有classes目录和lib目 录!要是有的话,那直接把虚拟目录指定到此webapp目录下即“D:/EclipseWorkspace/testMaven/src/main /webapp”那该多好,就不用每次修改了页面都需要运行命令mvn clean package之后才能看到效果!

      对于这个问题是可以解决的,由于maven遵循约定优先于配置的思想,所以如果不做特殊配置,它约定默认是把打包之后产生的文件都放在target目录下的。要想改变此默认行为,我们修改在项目中的pom.xml文件。在此项目中,添加如下配置:

<build>
    <plugins>    

 

         <!-- 更改maven默认的打包目录:将class文件和lib目录打包放到指定的目录 -->
        <plugin>
           <artifactId>maven-war-plugin</artifactId>
           <configuration>
               <webappDirectory>${basedir}/src/main/webapp</webappDirectory>
               <warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
           </configuration>
       </plugin>      
    </plugins>
</build>

 

   4. 在Pom文件中增加如上命令后运行打包命令mvn clean package,项目的目录结构图如图四:



 
图四

   从图四可以看到,webapp的子目录WEB-INF下面多出了classes lib目录。这样的话,如果你只修改了页面,就不需要再执行mvn clean package命令对项目进行打包了(因为页面的源文件都直接在webapp目下的),直接享受修改页面即可刷新页面的快捷了(但是如果修改的是java文 件,则还是需要执行mvn clean package命令重新打包的;同理每次修改了pom.xml文件也是一样,即也需要重新执行mvn clean package)!

   总之:该方法一旦启动tomcat后,如果只是jsp页面的变化,不需要重新运行mvn clean package 命令,而如果是修改了java代码后,不需要将tomcat停掉,只需要运行 mvn clean package命令即可。会自动部署。

    

附:不使用Eclipse怎样创建Maven的项目?

    使用命令行: mvn archetype:create -DgroupId=my.maven.test -           DartifactId=testMaven  -DarchetypeArtifactId=maven-archetype-webapp

 

 

 该篇文章的另一个重要的主题如何在Eclipse中将两个有Dependency的Maven Project关联起来:

    比如现在有一个maven web项目:storeweb, 该项目可以直接部署在Tomcat中,但该项目本身又直接依赖另一个maven 项目,如store_rest项目,该项目为storeweb项目为store_rest项目提供Rest风格的API.那么在将storeweb项目部署到Tomcat的时候,同时也需要将store_rest部署到Tomcat中,可以使用下面的方法:分为2步,第一步是Add maven Dependencies,第二步是Add project dependencies.

       4.1 Add maven dependencies  

Right click the web project “properties” -------> click the “Deployment Assembly” ---->

Click add button

 



 

 

4.2 Choose Java Build Path Entires ---> click Next

 



     

 

       4.3 Choose Maven Dependencies------>  Finish

 

 

            4.4  Add project dependencies, Click add button

 



 

 

          4. 5: Choose Project-----> Click Next button

 



 

          4.6  Choose your dependencies project -----> Click Finish button



 

 

 

 

 

 

猜你喜欢

转载自josh-persistence.iteye.com/blog/1881595