Eclipse + Maven + Tomcat:使用自定义选项构建WAR时测试Web应用程序

时间:2011-06-24 17:18:10

标签: java eclipse tomcat maven m2eclipse

我正在使用Eclipse(Helios)和“m2eclipse”插件。我正在开发一个基于Maven的Web应用程序项目,我在Eclipse内部设置的本地Tomcat服务器上进行测试。

一般来说,这或多或少都有效。 “m2eclipse”有时可能是片状的...但是在大多数情况下它会使我的POM和我的Eclipse项目设置保持同步,同样在Tomcat中保持已部署的代码最新。

然而,最近我添加了皱纹。我有一个JavaScript包含文件,从测试环境到实际生产环境时需要有所不同。这些差异太大,无法通过Maven过滤和令牌替换进行干净处理。我需要的是在我的项目中保留两个单独的文件,并且只部署适合构建配置文件的文件。

我在Maven POM中用一些“targetPath”技巧完成了这个:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-war-plugin</artifactId>
   <version>2.1.1</version>
   <configuration>
      <webResources>
         <resource>
            <!-- take the stuff from a "prod" or "non-prod" subdirectory and copy it one level up -->
            <directory>src/main/webapp/js/${profile.name}</directory>
            <targetPath>js</targetPath>
         </resource>
         <resource>
            <!-- now don't deploy those profile-specific subdirectories -->
            <directory>src/main/webapp/js</directory>
            <excludes>
               <exclude>prod</exclude>
               <exclude>non-prod</exclude>
            </excludes>
         </resource>
      </webResources>
   </configuration>
</plugin>

这构建了一个完美的WAR文件,当我部署一些外部Tomcat服务器时,它可以正常工作。但是,问题是Eclipse在Eclipse中运行Tomcat时不使用该WAR文件。相反,Eclipse使用应用程序的爆炸版本,部署到一个神秘的目录,如下所示:

<workspace>/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/MyApp

...显然应用程序的文件被复制到此位置,在Maven执行上面显示的小技巧之前。因此,在Eclipse内部进行本地测试时,预期位置根本不存在JavaScript包含。

有解决这个问题的方法吗?可能是Eclipse更改或Maven更改,将文件从Maven的“目标”目录拉到Eclipse的“wtpwebapps”目录中?也许还有另一种方法来解决特定于配置文件的包含文件问题?

2 个答案:

答案 0 :(得分:10)

从eclipse(Helios)3.6开始,“Java EE Module Dependencies”选项被“Deployment Assembly”选项取代。您可以在此“部署程序集”选项中配置要部署到Eclipse内部运行的tomcat的文件(项目属性---&gt;部署程序集)

enter image description here

答案 1 :(得分:1)

您可以使用maven-cargo-plugin部署到本地服务器,而不是直接从Eclipse运行。这将使用你的maven生成的战争。

如果您正在进行的测试可以自动化,那么可以将其作为完全由maven运行的集成测试套件的一部分。